java
이 자습서에서는 예제를 통해 Java 컬렉션 프레임워크의 PriorityQueue 클래스에 대해 알아봅니다.
PriorityQueue
클래스는 힙 데이터 구조의 기능을 제공합니다.
큐 인터페이스를 구현합니다.
일반 큐와 달리 우선순위 큐 요소는 정렬된 순서로 검색됩니다.
요소를 오름차순으로 검색한다고 가정해 보겠습니다. 이 경우 우선순위 큐의 헤드가 가장 작은 요소가 됩니다. 이 요소가 검색되면 다음으로 작은 요소가 대기열의 선두가 됩니다.
우선순위 큐의 요소는 정렬되지 않을 수 있다는 점에 유의하는 것이 중요합니다. 그러나 요소는 항상 정렬된 순서로 검색됩니다.
<시간>
우선 순위 대기열을 생성하려면 java.util.PriorityQueue
를 가져와야 합니다. 패키지. 패키지를 가져온 후 Java에서 우선 순위 대기열을 만드는 방법은 다음과 같습니다.
PriorityQueue<Integer> numbers = new PriorityQueue<>();
여기에서 인수가 없는 우선 순위 대기열을 만들었습니다. 이 경우 우선순위 큐의 헤드는 큐의 가장 작은 요소입니다. 그리고 요소는 대기열에서 오름차순으로 제거됩니다.
그러나 Comparator
의 도움으로 요소의 순서를 사용자 정의할 수 있습니다. 상호 작용. 이 튜토리얼의 뒷부분에서 이에 대해 알아볼 것입니다.
PriorityQueue
클래스는 Queue
에 있는 모든 메소드의 구현을 제공합니다. 인터페이스.
add()
- 지정된 요소를 큐에 삽입합니다. 대기열이 가득 차면 예외가 발생합니다.offer()
- 지정된 요소를 큐에 삽입합니다. 대기열이 가득 차면 false
을 반환합니다. .예를 들어,
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<Integer> numbers = new PriorityQueue<>();
// Using the add() method
numbers.add(4);
numbers.add(2);
System.out.println("PriorityQueue: " + numbers);
// Using the offer() method
numbers.offer(1);
System.out.println("Updated PriorityQueue: " + numbers);
}
}
출력
PriorityQueue: [2, 4] Updated PriorityQueue: [1, 4, 2]
여기에서 numbers라는 우선 순위 대기열을 만들었습니다. . 대기열에 4와 2를 삽입했습니다.
2 앞에 4가 삽입되어 있지만, queue의 head는 2입니다. 이는 priority queue의 head가 queue의 가장 작은 요소이기 때문입니다.
그런 다음 대기열에 1을 삽입했습니다. 대기열은 이제 가장 작은 요소 1을 대기열의 헤드에 저장하도록 재정렬됩니다.
<시간>
우선 순위 대기열의 요소에 액세스하려면 peek()
을 사용할 수 있습니다. 방법. 이 메서드는 큐의 헤드를 반환합니다. 예를 들어,
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(4);
numbers.add(2);
numbers.add(1);
System.out.println("PriorityQueue: " + numbers);
// Using the peek() method
int number = numbers.peek();
System.out.println("Accessed Element: " + number);
}
}
출력
PriorityQueue: [1, 4, 2] Accessed Element: 1<시간>
remove()
- 대기열에서 지정된 요소를 제거합니다.poll()
- 큐의 헤드를 반환하고 제거합니다.예를 들어,
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(4);
numbers.add(2);
numbers.add(1);
System.out.println("PriorityQueue: " + numbers);
// Using the remove() method
boolean result = numbers.remove(2);
System.out.println("Is the element 2 removed? " + result);
// Using the poll() method
int number = numbers.poll();
System.out.println("Removed Element Using poll(): " + number);
}
}
출력
PriorityQueue: [1, 4, 2] Is the element 2 removed? true Removed Element Using poll(): 1<시간>
우선 순위 큐의 요소를 반복하려면 iterator()
를 사용할 수 있습니다. 방법. 이 방법을 사용하려면 java.util.Iterator
을 가져와야 합니다. 패키지. 예를 들어,
import java.util.PriorityQueue;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(4);
numbers.add(2);
numbers.add(1);
System.out.print("PriorityQueue using iterator(): ");
//Using the iterator() method
Iterator<Integer> iterate = numbers.iterator();
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
출력
PriorityQueue using iterator(): 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) {
// Creating a priority queue
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);
// elements are sorted in reverse order
if (value > 0) {
return -1;
}
else if (value < 0) {
return 1;
}
else {
return 0;
}
}
}
출력
PriorityQueue: [4, 3, 1, 2]
위의 예에서는 CustomComparator를 전달하는 우선 순위 대기열을 만들었습니다. 클래스를 인수로 사용합니다.
CustomComparator 클래스는 Comparator
을 구현합니다. 인터페이스.
그런 다음 compare()
를 재정의합니다. 방법. 이 메서드는 이제 요소의 머리 부분이 가장 큰 숫자가 되도록 합니다.
비교기에 대해 자세히 알아보려면 Java Comparator를 방문하세요.
java
자바 ArrayBlockingQueue 이 자습서에서는 예제를 통해 ArrayBlockingQueue 클래스와 해당 메서드에 대해 알아봅니다. ArrayBlockingQueue Java Collections 프레임워크의 클래스는 배열을 사용하여 차단 대기열 구현을 제공합니다. Java BlockingQueue 인터페이스를 구현합니다. ArrayBlockingQueue 생성 배열 차단 대기열을 생성하려면 java.util.concurrent.ArrayBlockingQueue를 가져와야 합니다. 패키지. 패키지를 가져온
자바 LinkedBlockingQueue 이 자습서에서는 예제를 통해 LinkedBLockingQueue 클래스와 해당 메서드에 대해 알아봅니다. LinkedBlockingQueue Java Collections 클래스 프레임워크는 연결 목록을 사용하여 차단 대기열 구현을 제공합니다. Java BlockingQueue 인터페이스를 구현합니다. LinkedBlockingQueue 생성 연결된 차단 대기열을 생성하려면 java.util.concurrent.LinkedBlockingQueue를 가져와야 합니다. 패키지. J