PriorityQueue
:
디폴트 :
낮은 숫자 순으로 우선순위가 높음
PriorityQueue<Integer> pq1 = new PriorityQueue<>();
for (int i = 1; i <= 5; i++) {
pq1.add(i);
}
for (int i = 1; i <= 5; i++) {
System.out.print(pq1.poll() + " ");
}
결과 : 1 2 3 4 5
- 괄호() 안에 조건식을 넣어주면 조건 변경 가능
// ex) Collections.reverseOrder() : 높은 숫자 순으로 우선순위 결정
PriorityQueue<Integer> pq2 = new PriorityQueue<>(Collections.reverseOrder());
for (int i = 1; i <= 5; i++) {
pq2.add(i);
}
for (int i = 1; i <= 5; i++) {
System.out.print(pq2.poll() + " ");
}
결과 : 5 4 3 2 1
// ex) 절댓값을 기준으로 우선순위를 높게 하되 절댓값이 같으면 음수를 우선할 경우
// 괄호 안에서 다시 재정의 해주면 된다.
PriorityQueue<Integer> pq3 = new PriorityQueue<>((o1, o2) -> { // 정렬 기준 다시 세움 // o1과 o2를 비교한다
int first_abs = Math.abs(o1);
int second_abs = Math.abs(o2);
if(first_abs == second_abs) {
return o1 > o2 ? 1 : -1; // 절댓값이 같은 경우 음수 우선
}
return first_abs - second_abs; // 절댓값 작은 데이터 우선
});
for (int i = -5; i <= 5; i++) {
pq3.add(i);
}
for (int i = -5; i <= 5; i++) {
System.out.print(pq3.poll() + " ");
}
결과 : 0 -1 1 -2 2 -3 3 -4 4 -5 5