PrioirityQueue에서는 처음부터 순차적으로 뽑는것(poll)만 가능함. 혹은 순차적으로 검색(peek)만 전체 검색 후 가능함..
'
이런 경우 좀더 쉽게 순서를 바꿔서 뽑거나, 아니면 order 순서를 바꾸는것이 가능함..
reverseOrder 를 이용한 방법임.
/*reversed order*/ PriorityQueue<Element> revq = new PriorityQueue<Element>(q.size(),Collections.reverseOrder()); |
sample code
public class Solution { public static void main(String[] args) {
PriorityQueue<Element> q = new PriorityQueue<Element>();
int A[] = {10, 4, 2, 5, 1, 1, 2, 4, 5, 6, 7};
for (int i = 0; i < A.length; i++) { q.add(new Element(A[i])); }
/*Object tmp[] = q.toArray();
int big = ((Element)tmp[tmp.length-1]).getNum(); int small = ((Element)tmp[0]).getNum();
System.out.println("Biggest : " + big); System.out.println("Smallest : " + small);*/ /*reversed order*/ PriorityQueue<Element> revq = new PriorityQueue<Element>(q.size(),Collections.reverseOrder());
revq.addAll(q);
System.out.println("------ reversed order -------------"); while (!revq.isEmpty()) { System.out.println(revq.poll().getNum()); }
System.out.println("------ order -----------------"); while (!q.isEmpty()) { System.out.println(q.poll().getNum()); } } } class Element implements Comparable<Element>{ private int num; // 정렬의 기준이 될 값
public Element(int num){ this.num = num; }
public int getNum(){ return num; } @Override // Comparable 인터페이스의 compareTo 메서드 구현 public int compareTo(Element o) { return num <= o.num ? -1 : 1; } } |
output
------ reversed order ------------- 10 7 6 5 5 4 4 2 2 1 1 ------ order ----------------- 1 1 2 2 4 4 5 5 6 7 10 |