[java] 자바 큐 인터페이스의 정렬 방식

자바에서 Queue 인터페이스는 요소를 순서대로 저장하고 관리하는 자료구조를 나타냅니다. Queue의 구현체들은 다양한 방식으로 요소들을 정렬합니다. 여기서는 PriorityQueueLinkedList를 중심으로 자바 큐 인터페이스의 정렬 방식을 알아보겠습니다.

PriorityQueue의 정렬 방식

PriorityQueue우선 순위에 따라 요소를 정렬합니다. 기본적으로는 요소들의 ComparatorComparable에 정의된 우선 순위에 따라 최소 힙(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 구현체를 선택하여 사용해야 합니다.