💡 우선순위 큐는 왜 배열로 구현하지 않을까?
- 우선순위가 높은 순서대로 넣는다면, 우선순위가 높은 데이터를 반환하는 것은 맨 앞의 인덱스를 이용하면 되므로 어렵지 않다.
- 하지만 우선순위가 중간인 것이 들어가야하는 삽입 과정에서는 뒤에 데이터까지 모두 한 칸씩 뒤로 밀어야한다.
- 최악의 경우 삽입해야하는 위치를 찾기 위해 모든 인덱스를 탐색해야한다.
- 시간복잡도 : 삭제 O(1), 삽입 O(n)
💡 우선순위 큐는 왜 배열로 구현하지 않을까?
- 우선순위가 높은 순선대로 연결시키면, 우선순위가 높은 데이터를 반환하는 것은 쉽다.
- 하지만 삽입 과정에서는 그 위치를 찾아야하고, 최악의 경우 삽입해야하는 위치를 찾기 위해 맨 끝까지 가게 된다.
- 시간 복잡도 : 삭제 O(1), 삽입 O(n)
//낮은 숫자가 우선 순위인 int 형 우선순위 큐 선언
PriorityQueue<Integer> priorityQueueLowest = new PriorityQueue<>();
//높은 숫자가 우선 순위인 int 형 우선순위 큐 선언
PriorityQueue<Integer> priorityQueueHighest = new PriorityQueue<>(Collections.reverseOrder());
PriorityQueue<Integer> pq = new PriorityQueue<>();
// 1, 15, 8, 21, 25, 18, 10 값 추가
pq.add(1); pq.add(15); pq.offer(10);
pq.add(21); pq.add(25); pq.offer(18);
pq.add(8);
System.out.println(pq.size());
pq.poll(); //우선순위가 가장 높은 값을 반환하고 제거
pq.remove(); //우선순위가 가장 높은 값 제거
pq.remove(1); //index 순위에 해당하는 값을 제거
System.out.println(pq.peek()); //우선순위가 가장 높은 값 출력
Iterator iterator = pq.iterator(); //Iterator 메소드 사용하여 출력
while(iterator.hasNext())
System.out.print(iterator.next() + " ");