Language/Java

PriorityQueue II. Reverse Order

아르비스 2016. 5. 16. 09:26

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