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 를 사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.