PHpullh

JAVA · 컬렉션

PriorityQueue

우선순위 큐의 힙(Heap) 기반 동작과 활용법입니다.

컬렉션중급PriorityQueue우선순위큐Comparable

핵심 설명

우선순위 큐의 힙(Heap) 기반 동작과 활용법입니다.

Java code

import java.util.*;

public class PriorityQueueDemo {
    record Task(String name, int priority) implements Comparable<Task> {
        @Override
        public int compareTo(Task other) {
            return Integer.compare(this.priority, other.priority);
        }
    }

    public static void main(String[] args) {
        // 최소 힙 (기본)
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();
        minHeap.addAll(List.of(5, 1, 3, 2, 4));
        while (!minHeap.isEmpty()) {
            System.out.print(minHeap.poll() + " "); // 1 2 3 4 5
        }
        System.out.println();

        // 최대 힙
        PriorityQueue<Integer> maxHeap =
            new PriorityQueue<>(Comparator.reverseOrder());
        maxHeap.addAll(List.of(5, 1, 3, 2, 4));
        System.out.println(maxHeap.poll()); // 5

        // 커스텀 객체
        PriorityQueue<Task> taskQueue = new PriorityQueue<>();
        taskQueue.add(new Task("낮은 우선순위", 3));
        taskQueue.add(new Task("긴급!", 1));
        taskQueue.add(new Task("보통", 2));

        while (!taskQueue.isEmpty()) {
            Task t = taskQueue.poll();
            System.out.printf("[%d] %s%n", t.priority(), t.name());
        }
        // [1] 긴급! → [2] 보통 → [3] 낮은 우선순위
    }
}

학습 팁

PriorityQueue를 순회하면 정렬 순서가 보장되지 않습니다. 정렬 순서로 꺼내려면 poll()을 반복하세요.

주의할 점

PriorityQueue는 스레드 안전하지 않습니다. 멀티스레드에서는 PriorityBlockingQueue를 사용하세요.

자주 묻는 질문

PriorityQueue란 무엇인가요?

우선순위 큐의 힙(Heap) 기반 동작과 활용법입니다.

PriorityQueue 학습 시 주의할 점은 무엇인가요?

PriorityQueue 는 스레드 안전하지 않습니다. 멀티스레드에서는 PriorityBlockingQueue 를 사용하세요.