개발/Java

[Java] PriorityQueue (우선순위 큐)

뚜키 💻 2022. 3. 12. 00:26
반응형

[Java] PriorityQueue (우선순위 큐)

 

목차

Queue?

PriorityQueue (우선순위 큐)

PriorityQueue 사용법

- 선언

- 추가

- 삭제

- 출력

- 기타

우선순위 큐 (PriorityQueue) 정리

 


# Queue?

  • 큐(Queue)는 FIFO(First In First Out)인 자료구조.
  • 먼저들어온게 먼저 나간다.

 

 

# PriorityQueue (우선순위 큐)

  • 우선순위를 정해서 그 우선 순위가 높은게 먼저 나가는 자료구조
  • 보통 Heap 자료구조를 이용해 구현.
  • 입력받은 데이터를 이용하여 최대힙 또는 최소힙을 구성해서 루트 노드의 데이터를 꺼낸다.
  • null을 허용하지 않는다
  • 비교할 수 없는 객체는 만들 수 없다
  • 내부구조 : 이진트리 힙
  • 삽입, 삭제시 시간복잡도 : O(logn)

 


 

PriorityQueue 사용법

# 선언

import java.util.Collections;
import java.util.PriorityQueue;

PriorityQueue<Integer> q1 = new PriorityQueue<>();	// 1

PriorityQueue<Integer> q2 = new PriorityQueue<>(Collections.reverseOrder());	// 2

PriorityQueue<String> q3 = new PriorityQueue<>();	// 3

1. 낮은 순자순

2. 높은 숫자순 (Collections.reverseOrder() : 역순)

3. 낮은 문자순

 

 

# 추가

q1.add(3);
q1.offer(10);

add(e) : 삽입에 성공하면 true를 반환,  여유 공간이 없어서 삽입에 실패하면 IllegalStateException을 발생

offer(e) : 성공하면 true 실패하면 false 반환

 

추가 과정

1. 우선순위 큐에 숫자 6 추가

2. 10(부모)이랑 비교해서 작은 값이기 때문에 스왑

3. 1(부모)이랑 비교해서 큰 값이기 때문에 스왑X

 

 

# 삭제

q1.poll();
q1.remove();
q1.clear();

poll() : 우선순위가 가장 높은 값 제거, 큐가 비어있을때는 null을 리턴

remove() : 우선순위가 가장 높은 값 제거, 비어있으면 예외발생

remove(Object o) : o 제거

clear() : 우선순위 큐의 모든 값 삭제

 

 

삭제 과정

1. 루트 노드(1)랑 마지막 노드(13)랑 스왑

2. 마지막 노드가 된 1 제거

3. 부모 노드(6)랑 자식 노드(15, 13)를 비교하여 더 작은 값이랑 스왑

4. 부모 노드(13)이랑 자식 노드(17)를 비교하지만 부모 노드가 더 큰 값이기 때문에 스왑X

 

 

# 값 출력 (제거X)

q1.peek();
q1.element();

peek() : 우선순위가 가장 높은 값 출력, 비어있으면 null

element() : 우선순위가 가장 높은 값 출력,  비어있으면 예외

 

 

# 기타

contains(Object o) : 포함여부확인, 포함되어있으면 true

isEmpty() : 비어있는지 확인

size() : 크기

 

 

전체 값 가져올때는 for문 혹은 Iterator 사용

 


 

우선순위 큐 (PriorityQueue)  정리

추가 : add(e), offer(e)

삭제 : poll(), remove(), remove(o)

출력 : peek(), element()

크기 : size()

포함확인 : contains(o)

비어있는지확인 : isEmpty()

 

 

 

 

 

Reference

https://velog.io/@gillog/Java-Priority-Queue%EC%9A%B0%EC%84%A0-%EC%88%9C%EC%9C%84-%ED%81%90

https://crazykim2.tistory.com/575

https://goodteacher.tistory.com/112

반응형