PriorityQueue(우선순위 큐) 클래스란?
우선순위 큐는 자료구조 중 하나로, 데이터를 우선순위에 따라 처리할 수 있는 큐입니다. 일반적인 큐와 달리, 우선순위 큐는 데이터를 삽입할 때 우선순위에 맞게 정렬되며, 삭제할 때는 우선순위가 가장 높은 데이터가 삭제됩니다.
자바에서는 PriorityQueue 클래스를 사용하여 우선순위 큐를 구현할 수 있습니다. PriorityQueue 클래스는 java.util 패키지에 포함되어 있으며, 이는 원소들을 내부적으로 정렬된 상태로 유지합니다. 다른 말로 하면, PriorityQueue는 작은 값이 우선순위를 가지도록 정렬된 큐라고 할 수 있습니다.
PriorityQueue(우선순위 큐) 클래스 사용법
1. PriorityQueue 인스턴스 생성하기
PriorityQueue 클래스를 사용하기 위해서는 먼저 PriorityQueue 인스턴스를 생성해야 합니다. 아래와 같이 생성할 수 있습니다.
PriorityQueue<Integer> pq = new PriorityQueue<>();
위 예제에서는 Integer 타입의 값을 저장하는 우선순위 큐를 생성하였습니다. 우선순위 큐는 기본적으로 오름차순으로 정렬되는데, 이 경우 작은 값이 우선순위를 가지게 됩니다. 만약 내림차순으로 정렬하고 싶다면 아래와 같이 Comparator를 이용하여 인스턴스를 생성합니다.
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
2. 우선순위 큐에 원소 추가하기
PriorityQueue 클래스는 add() 혹은 offer() 메소드를 이용하여 우선순위 큐에 원소를 추가할 수 있습니다. 아래의 예제를 확인해보세요.
pq.add(3);
pq.offer(1);
pq.add(5);
위 예제에서는 우선순위 큐에 3, 1, 5를 추가하였습니다. 여기서 우선순위 큐는 작은 값이 우선순위를 가지므로, 우선순위 큐에는 1, 3, 5 순서로 저장됩니다.
3. 우선순위 큐의 가장 우선 순위에 있는 원소 가져오기
우선순위 큐에서 가장 우선 순위에 있는 원소를 가져오기 위해서는 peek() 혹은 poll() 메소드를 이용합니다. 아래의 예제를 확인해보세요.
System.out.println(pq.peek());
System.out.println(pq.poll());
위 예제에서는 peek() 메소드를 이용하여 가장 우선 순위에 있는 원소를 출력하고, poll() 메소드를 이용하여 해당 원소를 우선순위 큐에서 삭제합니다. 출력 결과는 1이 되고, 우선순위 큐에는 3, 5만 남게 됩니다.
PriorityQueue(우선순위 큐) 클래스 예제
아래는 PriorityQueue 클래스를 활용한 예제입니다. 우선순위 큐에 여러 스트링 값을 추가하고, 해당 값을 우선순위에 따라 출력하는 코드입니다.
import java.util.PriorityQueue;
public class PriorityQueueExample {
public static void main(String[] args) {
PriorityQueue<String> pq = new PriorityQueue<>();
pq.offer("apple");
pq.offer("banana");
pq.offer("kiwi");
while (!pq.isEmpty()) {
System.out.println(pq.poll());
}
}
}
위 예제에서는 "apple", "banana", "kiwi" 값을 우선순위 큐에 추가하고, 이를 poll() 메소드를 이용하여 우선순위에 따라 출력합니다. 출력 결과는 다음과 같습니다.
apple
banana
kiwi
정리
우선순위 큐는 PriorityQueue 클래스를 사용하여 구현할 수 있습니다. PriorityQueue 클래스는 작은 값이 우선순위를 가지도록 정렬되는데, 이를 내림차순으로 하고 싶다면 Comparator를 이용하여 인스턴스를 생성하면 됩니다. 우선순위 큐에는 add() 혹은 offer() 메소드를 이용하여 원소를 추가하며, peek() 메소드를 이용하여 가장 우선 순위에 있는 원소를 가져오고, poll() 메소드를 이용하여 해당 원소를 삭제할 수 있습니다. PriorityQueue 클래스는 제네릭을 사용하여 다양한 타입의 값을 저장할 수 있습니다. 이를 활용하여 원하는 타입의 우선순위 큐를 쉽게 구현할 수 있습니다.
댓글