본문 바로가기

프로그래밍 언어 (プログラミング言語)/JAVA

자바에서의 Priority_Queue

우선 C++에서의 Priority Queue는 default가 최대힙으로 구현이 된다.

알고리즘 문제를 자바로 풀면서, 당연히 자바도 default가 최대힙인 줄 알았으나 ,

자바에서는 defualt가 최소힙이였다.

( 일반적으로, Heap이라고 함은 최대Heap을 말한다.)

C++

priority_queue<int, vector<int>, less<int> > max_heap; // less는 default이므로 생략이 가능. 

priority_queue<int, vector<int="">, greater<int>> min_heap; // 최소힙 구현 시, greater<int>를 넣어 줌

.

JAVA

   PriorityQueue<Integer>  max_heap = new PriorityQueue<>(Collections.reverseOrder()); 
   PriorityQueue<Integer> min_heap = new PriorityQueue<>();

 

JAVA의 PriorityQueue 사용법

Priority Queue 선언

import java.util.PriorityQueue; //import

//int형 priorityQueue 선언 (최소힙) 자바는 최소힙이 defulat
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();

//int형 priorityQueue 선언 (최대힙)
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());

Priority Queue 값 추가

priorityQueue.add(1);     // priorityQueue 값 1 추가
priorityQueue.add(2);     // priorityQueue 값 2 추가
priorityQueue.offer(3);   // priorityQueue 값 3 추가

자바의 우선순위 큐에 값을 추가하고 싶다면 add(value) 또는 offer(value)라는 메서드를 활용하면 됩니다.

add(value) 메서드의 경우 만약 삽입에 성공하면 true를 반환하고,( offer(value)와의 차이점 )

큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생시킵니다.

 

Priority Queue 값 삭제

priorityQueue.poll();       // priorityQueue에 첫번째 값을 반환하고 제거 비어있다면 null
priorityQueue.remove();     // priorityQueue에 첫번째 값 제거
priorityQueue.clear();      // priorityQueue에 초기화

 

Priority Queue에서 우선순위가 가장 높은 값 출력

PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();//int형 priorityQueue 선언
priorityQueue.offer(2);     // priorityQueue에 값 2 추가
priorityQueue.offer(1);     // priorityQueue에 값 1 추가
priorityQueue.offer(3);     // priorityQueue에 값 3 추가
priorityQueue.peek();       // priorityQueue에 첫번째 값 참조 = 1

Priority Queue에서 우선순위가 가장 높은 값을 참조하고 싶다면 peek()라는 메서드를 사용하면 됩니다.

위의 예시에서는 우선순위가 가장 높은 1이 출력됩니다.