English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 예제를 통해 Java 컬렉션 프레임워크의 PriorityQueue 클래스를 배웁니다.
PriorityQueue 클래스는 힙 데이터 구조의 기능을 제공합니다.
그것은 이를 구현합니다Queue 인터페이스
일반 큐와 달리, 우선순위 큐의 요소는 정렬된 순서로 검색됩니다.
오름차순으로 요소를 검색하고자 한다면, 이 경우 우선순위 큐의 머리는 가장 작은 요소입니다. 이 요소를 검색한 후, 다음으로 작은 요소가 큐의 머리가 됩니다.
참고할 점은, 우선순위 큐의 요소가 정렬되지 않을 수 있습니다. 그러나, 요소는 항상 정렬된 순서로 검색됩니다.
为了创建优先级队列,我们必须导入java.util.PriorityQueue包。导入程序包后,可以使用以下方法在Java中创建优先级队列。
PriorityQueue<Integer> numbers = new PriorityQueue<>();
최우선순위 큐를 생성하려면 java.util.PriorityQueue 패키지를 가져와야 합니다. 패키지를 가져온 후 다음과 같은 방법으로 Java에서 최우선순위 큐를 생성할 수 있습니다.
이곳에서는 파라미터가 없는 최우선순위 큐를 생성했습니다. 이 경우, 최우선순위 큐의 머리는 큐에서 가장 작은 요소입니다. 요소는 오름차순으로 큐에서 제거됩니다.
PriorityQueue 메서드
요소를 Priority Queue에 삽입 - add()
지정된 요소를 큐에 삽입합니다. 큐가 꽉 차면 예외가 발생합니다. - offer()
예를 들어,
import java.util.PriorityQueue; class Main { public static void main(String[] args) { //최우선순위 큐 생성 PriorityQueue<Integer> numbers = new PriorityQueue<>(); //지정된 요소를 큐에 삽입합니다. 큐가 꽉 차면 false를 반환합니다. numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: "} + numbers); //add() 메서드 사용 offer() 메서드 사용1); numbers.offer( + numbers); } }
출력 결과
PriorityQueue: [2, 4] System.out.println("최신 Priority Queue: "}1, 4, 2]
최신 Priority Queue:4이곳에서 우리는 numbers라는 이름의 최우선순위 큐를 생성했습니다. 우리는2데이터를 큐에 삽입
그러나,4데이터가 삽입되었습니다.2그 전에, 큐의 머리는2이는 최우선순위 큐의 머리가 큐에서 가장 작은 요소인 이유 때문입니다.
그런 다음, 우리는1데이터를 큐에 삽입하여 큐를 재정렬하여 가장 작은 요소를1데이터를 큐의 머리에 저장
최우선순위 큐에서 요소를 접근하려면 peek() 메서드를 사용할 수 있습니다. 이 메서드는 큐의 머리를 반환합니다. 예를 들어,
import java.util.PriorityQueue; class Main { public static void main(String[] args) { // 생성 우선순위 큐 PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: "} + numbers); //peek() 메서드 사용 int number = numbers.peek(); System.out.println("요소 접근: "} + number); } }
출력 결과
PriorityQueue: [1, 4, 2] 요소 접근: 1
remove() - 지정된 요소를 큐에서 제거
poll() - 데이터를 반환하고 제거
예를 들어,
import java.util.PriorityQueue; class Main { public static void main(String[] args) { // 최우선순위 큐 생성 PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: "} + numbers); //remove() 메서드 사용 boolean result = numbers.remove(2); System.out.println("요소"2삭제되었는지 확인? "} + result); //poll() 메서드 사용 int number = numbers.poll(); System.out.println("사용자 poll()로 제거된 요소: "} + number); } }
출력 결과
PriorityQueue: [1, 4, 2] 요소2제거되었는가? true poll()를 사용하여 제거된 요소: 1
우선순위 큐 요소를 순회하려면 iterator() 메서드를 사용할 수 있습니다. 이 메서드를 사용하려면 java.util.Iterator 패키지를 가져오아야 합니다. 예를 들어
import java.util.PriorityQueue; import java.util.Iterator; class Main { public static void main(String[] args) { //생성 우선순위 큐 PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("iterator()를 사용하여 PriorityQueue를 순회합니다: "); //iterator() 메서드를 사용합니다 Iterator<Integer> iterate = numbers.iterator(); while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
출력 결과
iterator()를 사용하여 PriorityQueue를 순회합니다: 1, 4, 2,
메서드 | 내용 설명 |
---|---|
contains(element) | 우선순위 큐에서 지정된 요소를 검색합니다. 요소가 발견되면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
size() | 우선순위 큐의 길이를 반환합니다. |
toArray() | 우선순위 큐를 배열로 변환하고 반환합니다. |
위의 모든 예제에서 우선순위 큐 요소는 자연 순서(오름차순)로 검색됩니다. 그러나 우리는 이 순서를自定义할 수 있습니다.
이를 위해 우리는 자신의 comparator 클래스를 생성해야 합니다. 예를 들어
import java.util.PriorityQueue; import java.util.Comparator; class Main { public static void main(String[] args) { //생성 우선순위 큐 PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator()); numbers.add(4); numbers.add(2); numbers.add(1); numbers.add(3); System.out.print("PriorityQueue: " + numbers); } } class CustomComparator implements Comparator<Integer> { @Override public int compare(Integer number1, Integer number2) { int value = number1.compareTo(number2); //요소는 반대 순서로 정렬됩니다 if (value > 0) { return -1; } else if (value < 0) { return 1; } else { return 0; } } }
출력 결과
PriorityQueue: [4, 3, 1, 2]
위의 예제에서, PriorityQueue를 생성하고 CustomComparator 클래스를 파라미터로 전달했습니다.
CustomComparator 클래스는 Comparator 인터페이스를 구현합니다.
그런 다음, compare() 메서드를 재정의합니다. 이 메서드는 지금으로서는 요소의 머리를 가장 큰 수로 만듭니다.