개념/Java

[Java] 우선순위 큐(Priority Queue) 정렬

34suuuuu 2025. 1. 5. 20:15

우선순위 큐 (Priority Queue)

기본적으로 큐는 FIFO(First In First Out) 의 구조를 가지지만

우선순위 큐의 경우에는 순서가 아닌 순위가 높은 데이터가 먼저 나가는 자료구조를 말한다.

 

  • 가장 작은 값이 먼저 나오는 MinHeap
  • 가장 큰 값이 먼저 나오는 MaxHeap
  • 정해진 기준에 따라서 결과가 출력 (Comparator/ Comparable 사용)

 

1. 오름차순 정렬 (MinHeap)

우선순위 큐는 정수형에 대해서 기본적으로

오름차순 정렬을 하기 때문에 별도의 설정이 필요없다.

 

2. 내림차순 정렬 (MaxHeap)

 

오름차순의 반대의 경우이므로 List를 내림차순으로 정렬할 때와 마찬가지로 `Collections.reverseOrder()`를 통해 정렬할 수 있다.

선언할 때 기준을 설정해주면 된다.

 

3. 객체 혹은 String 정렬 

 

우선순위 큐에 객체를 적용하기 위해서는 Comparator 혹은 Comparable 혹은 람다식이 필요하다.

아래의 예시의 경우에는, Student 객체가 이름과 나이를 가지고 나이를 기준으로 정렬한다. 

 

1) 나이 기준 오름차순 정렬

  • `this.score - o.score`

 


2) 나이 기준 내림차순 정렬

  • `o.score - this.score`

 

4. Comparator를 이용한 객체 정렬