큐 (Queue)
데이터를 처리하기 전 잠시 저장하는 자료구조
원소를 FIFO 형식으로 저장
1. Queue
- 데이터를 처리하기 전 잠시 저장하는 자료구조
- tail에서 데이터를 받고 head에서 처리
- FIFO (First In First Out) 구조
- ArrayDeque, LinkedList, PriorityQueue가 존재
- 디큐 (Deque)는 전단과 후단에서 모두 데이터 추가, 삭제 가능
- add() : 큐의 용량이 초과되지 않으면 원소 추가
- 넘어갈 경우 IllegalStateException 오류 발생
- offer() 메소드는 원소 추가가 실패하면 false 반환
- remove(), poll() : 큐의 처음 원소를 제거하거나 가져옴
- remove()는 원소가 큐에 없을 경우 NoSuchElementException 발생
- poll()은 원소가 큐에 없을 경우 null 반환
- element(), peek() : 큐의 맨 처음 원소를 삭제하지 않고 가져옴
- element()는 원소가 큐에 없을 경우 NoSuchElementException 발생
- peek()는 원소가 큐에 없을 경우 null 반환
package ex18;
import java.util.LinkedList;
import java.util.Queue;
public class QueueTest {
public static void main(String[] args) {
Queue<Integer> q = new LinkedList<>();
// 0 ~ 4까지 큐에 추가
for (int i = 0; i < 5; i++)
q.add(i);
System.out.println("큐의 요소 : " + q);
// 맨 앞의 원소(0) 제거
int e = q.remove();
System.out.println("삭제된 요소 : " + e);
System.out.println(q);
}
}

2. PriorityQueue
- 원소가 무작위로 삽입돼도 정렬된 상태로 원소를 추출
- remove() 호출 시마다 가장 작은 원소가 추출
- 힙(heap)을 내부적으로 사용
- add(), remove() 호출 시 가장 작은 원소가 트리의 루트로 이동하는 이진 트리 구조
package ex18;
import java.util.PriorityQueue;
public class PriorityQueueTest {
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
pq.add(30);
pq.add(80);
pq.add(20);
System.out.println(pq);
// 숫자를 대입한 순서에 상관없이 가장 작은 원소가 제거
System.out.println("삭제된 요소 : " + pq.remove());
}
}

Share article