Queue 란?
이 자료구조에서는 앞(front)과 뒤(back)가 존재하며, 먼저 들어온 데이터가 먼저 빠져 나가는 선입선출(First-in-First-out)의 규칙을 따릅니다.
은행에서 사람들이 줄을 서서 대기하다가 먼저 온 순서대로 업무를 보는 것과 같습니다. 먼저 온 사람이 먼저 서비스를 받는 것(FIFO)이죠
자바에서 큐(Queue)는 LinkedList를 활용해서 사용한다.
import java.util.Queue;
import java.util.LinkedList;
Queue<Element> queue = new LinkedList<Element>();
Enqueue 동작
큐에 데이터를 추가하는 동작으로 offer 와 add 메소드가 있다.
두 메소드의 차이점은 공간의 제약이 있는 큐(Queue) 구현체에서 발생한다.
// 큐가 꽉차있는 경우
offer(value) : false 반환
add(value) : IllegalStateException 발생
사이즈 제약이 있는 큐를 사용하는 경우는 offer 메소드의 사용을 더 권장한다.
Dequeue 동작
큐의 데이터를 추출하는 동작으로, poll과 remove 모두 큐의 첫 번째 데이터를 제거하는 메소드이다.
두 메소드의 차이는 데이터가 없는 큐(Queue) 구현체에서 발생한다
// 큐가 비어있는 경우
poll() : null 반환
remove() : NoSuchElementException 발생
한 번에 큐에 있는 모든 데이터를 지우고 싶은 경우 clear 메소드를 호출하면 된다.
clear()
Peek 동작
큐의 데이터를 조회하는 동작으로, 첫 번째 데이터를 조회할 때 peek과 element 메소드를 사용한다.
두 메소드 역시 큐가 비어있을 때 동작 차이가 있다.
// 큐가 비어있는 경우
peek() : null 반환
element() : NoSuchElementException 발생
import java.util.LinkedList;
import java.util.Queue;
public class StackAndQueue {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
queue.offer("0");
queue.offer("1");
queue.offer("2");
/*queue.add("3");
queue.add("4");
queue.add("5");*/
System.out.println("=== Queue ===");
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}
실행결과