자바에서 Queue
인터페이스는 요소를 순서대로 저장하고 관리하는 자료구조를 나타냅니다. Queue
의 구현체들은 다양한 방식으로 요소들을 정렬합니다. 여기서는 PriorityQueue
와 LinkedList
를 중심으로 자바 큐 인터페이스의 정렬 방식을 알아보겠습니다.
PriorityQueue의 정렬 방식
PriorityQueue
는 우선 순위에 따라 요소를 정렬합니다. 기본적으로는 요소들의 Comparator
나 Comparable
에 정의된 우선 순위에 따라 최소 힙(min-heap)으로 정렬됩니다. 즉, 가장 우선 순위가 높은 요소가 먼저 나옵니다.
아래는 PriorityQueue
를 사용하여 요소를 추가하고 제거하는 간단한 예제입니다.
import java.util.PriorityQueue;
public class PriorityQueueExample {
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(3);
pq.add(1);
pq.add(2);
System.out.println(pq.poll()); // 1
System.out.println(pq.poll()); // 2
System.out.println(pq.poll()); // 3
}
}
위 예제에서 PriorityQueue
는 기본적으로 요소들을 최소 힙으로 정렬하여 1, 2, 3의 순서로 나오게 됩니다.
LinkedList의 정렬 방식
LinkedList
는 요소가 추가된 순서대로 정렬됩니다. 따라서 요소들을 추가한 순서대로 제거됩니다. 이는 Queue
인터페이스의 특성을 가지고 있지만, PriorityQueue
와는 다르게 요소의 우선 순위에 따라 정렬되지 않습니다.
아래는 LinkedList
를 사용하여 요소를 추가하고 제거하는 예제입니다.
import java.util.LinkedList;
import java.util.Queue;
public class LinkedListQueueExample {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.add(3);
queue.add(1);
queue.add(2);
System.out.println(queue.poll()); // 3
System.out.println(queue.poll()); // 1
System.out.println(queue.poll()); // 2
}
}
위 예제에서 LinkedList
를 사용한 Queue
는 요소가 추가된 순서대로 3, 1, 2의 순서로 나오는 것을 확인할 수 있습니다.
결론
PriorityQueue
는 우선 순위에 따라 요소를 정렬하는 데 사용되며, LinkedList
는 요소가 추가된 순서대로 정렬됩니다. 프로그램의 요구사항에 따라 적합한 Queue
구현체를 선택하여 사용해야 합니다.