반응형
해당 글에서는 Java 11 버전을 기준으로 PriorityQueue 클래스의 API에 대해서 확인합니다.
1) 우선순위 큐(Priority Queue)
💡 우선순위 큐(Priority Queue)
- 큐와 비슷한 자료구조로 데이터를 ‘일렬로 늘어놓은 다음’ 그중에서 ‘가장 우선순위가 높은 데이터를 가장 먼저 꺼내오는 방식’으로 동작하는 클래스를 의미합니다.
- Queue 인터페이스를 상속받기 때문에 Queue 인터페이스에서 정의된 메서드들도 사용할 수 있습니다.
[ 더 알아보기]
💡 우선순위 큐의 원리
- Dequeue : 우선순위 큐에서 데이터를 꺼내는 연산이며 가장 우선순위가 높은 데이터를 꺼내기에 가장 작은 값 또는 가장 큰 값이 꺼내집니다. : poll() 메서드를 이용합니다.
- Enqueue : 우선순위 큐에 데이터를 추가하는 연산을 의미합니다. : offer() 메서드를 이용합니다.
2) Priority Queue class Method
💡 해당 API 문서는 Java 11 버전을 기준으로 요약 정리한 API Doucument입니다.
💡 "분류" 부분은 개인적인 기준으로 분류를 하였으니 참고하시면 도움이 될 것 같습니다.
1. 우선순위 큐 주요 메서드
💡 Priority Queue의 주요한 메서드입니다.
메서드 | 리턴 값 | 분류 | 설명 |
contains(Object o) | boolean | 큐 요소 조회 | 이 큐가 지정된 '요소를 포함'하면 true 를 반환합니다. |
add(E e) | boolean | 큐 요소 삽입 | 지정된 요소를 이 '우선 순위 큐에 삽입'합니다. |
offer(E e) | boolean | 큐 요소 삽입 | 지정된 요소를 이 '우선 순위 큐'에 삽입합니다. |
clear() | void | 큐 요소 삭제 | '우선 순위 큐에서 모든 요소를 제거'합니다. |
remove(Object o) | boolean | 큐 요소 삭제 | 이 큐에서 지정된 요소의 '단일 인스턴스(있는 경우)를 제거'합니다. |
removeAll(Collection<?> c) | boolean | 큐 요소 삭제 | 지정된 컬렉션에 포함된 이 컬렉션의 '모든 요소를 제거'합니다. |
removeIf(Predicate<? super E> filter) | boolean | 큐 요소 삭제 | 지정된 조건을 만족하는 이 컬렉션의 모든 요소를 제거합니다. |
retainAll(Collection<?> c) | boolean | 큐 재구성 | 지정된 컬렉션에 포함된 요소만 이 컬렉션에 유지합니다(선택 사항). |
iterator() | Iterator<E> | 큐 순회 | 이 큐의 요소에 대한 반복자를 반환합니다. |
forEach(Consumer<? super E> action) | void | 큐 순회 | 이 Iterable의 각 요소에 대해 주어진 작업을 수행합니다. |
spliterator() | Spliterator<E> | 큐 병렬 처리 | 이 큐의 요소에 대한 binding 및 fail-fast Spliterator를 작성합니다. |
comparator() | Comparator<? super PriorityQueue<E>> | 큐 동작 정의 | 이 큐에서 요소를 정렬하는 데 사용되는 비교자를 반환합니다. 이 큐가 요소의 Comparable 에 따라 정렬되면 null을 반환합니다. |
toArray() | Object[] | 컬렉션 반환 | 이 큐의 모든 요소를 포함하는 배열을 반환합니다. |
toArray(T[] a) | <T> T[] | 컬렉션 반환 | 이 큐의 모든 요소를 포함하는 배열을 반환합니다. 반환된 배열의 런타임 유형은 지정된 배열의 유형과 동일합니다. |
[ 더 알아보기 ]
💡 add() 메서드와 offer() 메서드의 차이는 무엇인가?
- 큐가 가득 찬 상태에서 요소를 추가하고자 할때 각각 처리가 다릅니다.
- add : 큐가 가득찬 상태에서 요소를 삽입하는 경우 예외(IllegalStateException)가 발생합니다.
- offer: 큐가 가득찬 상태에서 요소를 삽입하는 경우 false 값을 반환합니다.
2. PriorityQueue extend Queue
💡 Priority Queue의 경우 인터페이스를 상속받기 때문에 Queue 인터페이스에서 정의된 메서드들도 사용할 수 있습니다.
메서드 | 리턴 값 | 분류 | 설명 |
element() | E | 큐 요소 조회 | 큐의 head(맨 앞)에 있는 요소를 반환합니다. 큐가 비어있는 경우 예외를 던집니다. |
peek() | E | 큐 요소 조회 | 큐의 head(맨 앞)에 있는 요소를 반환합니다. 큐가 비어있는 경우 null을 반환합니다. |
add(E e) | boolean | 큐 요소 추가 | 큐에 요소를 추가하고 성공적으로 추가되었는지 여부를 반환합니다. 큐가 제한된 용량을 가지는 경우 예외를 던집니다. |
offer(E e) | boolean | 큐 요소 추가 | 큐에 요소를 추가하고 성공적으로 추가되었는지 여부를 반환합니다. 큐가 제한된 용량을 가지는 경우 false를 반환합니다. |
remove() | E | 큐 요소 제거 | 큐의 head(맨 앞)에 있는 요소를 제거하고 반환합니다. 큐가 비어있는 경우 예외를 던집니다. |
poll() | E | 큐 요소 제거 | 큐의 head(맨 앞)에 있는 요소를 제거하고 반환합니다. 큐가 비어있는 경우 null을 반환합니다. |
3. PriorityQueue 생성자
생성자 | 설명 |
PriorityQueue() | 기본 초기 용량 (11)으로 구성된 PriorityQueue를 생성하고 해당 요소를 Comparable에 따라 정렬합니다. |
PriorityQueue(int initialCapacity) | 지정된 초기 용량으로 PriorityQueue를 생성하고 해당 요소를 Comparable에 따라 정렬합니다. |
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) | 지정된 초기 용량으로 PriorityQueue를 생성하고 지정된 comparator에 따라 해당 요소를 정렬합니다. |
PriorityQueue(Collection<? extends E> c) | 지정된 컬렉션의 요소를 포함하는 PriorityQueue를 생성합니다. |
PriorityQueue(Comparator<? super E> comparator) | 지정된 comparator에 따라 해당 요소를 정렬하며 기본 초기 용량으로 PriorityQueue를 생성합니다. |
PriorityQueue(PriorityQueue<? extends E> c) | 지정된 우선 순위 큐의 요소를 포함하는 PriorityQueue를 생성합니다. |
PriorityQueue(SortedSet<? extends E> c) | 지정된 정렬된 집합의 요소를 포함하는 PriorityQueue를 생성합니다. |
[참고] 생성자 선언 시 낮은-> 높은 형태와 높은 -> 낮은 형태로 우선순위 큐 객체를 생성합니다.
// [낮은 -> 높은 우선순위] 디폴트 Comparator를 사용합니다. 이 경우, 낮은 값이 높은 우선순위를 가집니다.
PriorityQueue<Integer> pq = new PriorityQueue<>();
// [높은 -> 낮은 우선순위] 우선순위 큐에서 높은 우선순위를 가진 요소가 낮은 우선순위를 가지도록 요소의 순서를 뒤집습니다.
PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());
💡 [참고] Collection Framework나 Queue에 대해 상세히 알고 싶으시면 아래의 글이 도움이 됩니다.
💡 [참고] Priority Queue와 관련된 문제를 확인하고 싶으시면 아래의 글이 도움이 됩니다.
오늘도 감사합니다. 😀
반응형
'Java > API Document' 카테고리의 다른 글
[Java/API] LinkedList Method API Document : Java 11 (0) | 2023.11.18 |
---|---|
[Java/API] WebClient Method API Document : Java 11 (0) | 2023.08.14 |
[Java/API] Queue Method API Document : Java 11 (0) | 2023.07.15 |
[Java/API] Stack Method API Document : Java 11 (0) | 2023.07.08 |
[Java/API] HashMap Method API Document : Java 11 (0) | 2023.05.29 |