Priority Queue란?
PriorityQueue
란우선순위 큐
로써 일반적인 큐의 구조 FIFO(First In First Out)를 가지면서, 데이터가 들어온 순서대로 데이터가 나가는 것이 아닌 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터가 먼저 나가는 자료구조이다.PriorityQueue
를 사용하기 위해선 우선순위 큐에 저장할 객체는 필수적으로Comparable Interface
를 구현해야한다.(중요)- Queue를 implements 하는 class
Priority Queue 특징
높은 우선순위의 요소를 먼저 꺼내서 처리하는 구조이다.
우선순위 큐에 들어가는 원소는 비교가 가능한 기준이 있어야한다.
- 내부 요소는 힙으로 구성되어 이진트리 구조로 이루어져 있다.
- 따라서 우선순위 큐를 이용한 정렬은 O(nlogn)이다.
- 우선순위를 중요시해야 하는 상황에서 주로 쓰인다.
실제 사용
Gillog class (Comparable Interface구현함)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Gillog implements Comparable<Gillog> {
private int writeRowNumber;
private String content;
public Gillog(int writeRowNumber, String content) {
this.writeRowNumber = writeRowNumber;
this.content = content;
}
public int getWriteRowNumber() {
return this.writeRowNumber;
}
public String getContent() {
return this.content;
}
@Override
public int compareTo(Gillog gillog) {
if (this.writeRowNumber > gillog.getWriteRowNumber())
return 1;
else if (this.writeRowNumber < gillog.getWriteRowNumber())
return -1;
return 0;
}
}
main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
PriorityQueue<Gillog> priorityQueue = new PriorityQueue<>();
priorityQueue.add(new Gillog(3650, "10년후 글"));
priorityQueue.add(new Gillog(31, "한달 후 글"));
priorityQueue.add(new Gillog(1, "첫번째 글"));
priorityQueue.add(new Gillog(365, "1년후 글"));
while (!priorityQueue.isEmpty()) {
Gillog gilLog = priorityQueue.poll();
System.out.println("글 넘버 : " + gilLog.getWriteRowNumber() + " 글 내용 : " + gilLog.getContent());
}
}