Java PriorityQueue
Java PriorityQueue
このチュートリアルでは、例を使って Java コレクション フレームワークの PriorityQueue クラスについて学びます。
PriorityQueue
クラスは、ヒープ データ構造の機能を提供します。
Queue インターフェイスを実装します。
通常のキューとは異なり、優先キュー要素はソートされた順序で取得されます。
要素を昇順で取得したいとします。この場合、プライオリティ キューの先頭が最小要素になります。この要素が取得されると、次に小さい要素がキューの先頭になります。
プライオリティ キューの要素はソートされない場合があることに注意することが重要です。ただし、要素は常にソートされた順序で取得されます。
PriorityQueue の作成
プライオリティ キューを作成するには、java.util.PriorityQueue
をインポートする必要があります。 パッケージ。パッケージをインポートしたら、Java でプライオリティ キューを作成する方法を次に示します。
PriorityQueue<Integer> numbers = new PriorityQueue<>();
ここでは、引数なしでプライオリティ キューを作成しました。この場合、プライオリティ キューの先頭はキューの最小要素です。また、要素はキューから昇順で削除されます。
ただし、 Comparator
を使用して要素の順序をカスタマイズできます インターフェース。これについては、このチュートリアルの後半で学習します。
PriorityQueue のメソッド
PriorityQueue
クラスは、Queue
に存在するすべてのメソッドの実装を提供します
要素を PriorityQueue に挿入
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 が挿入されていますが、キューの先頭は 2 です。これは、プライオリティ キューの先頭がキューの最小要素であるためです。
次に、キューに 1 を挿入しました。キューは、最小の要素 1 をキューの先頭に格納するように再配置されます。
PriorityQueue 要素へのアクセス
優先キューから要素にアクセスするには、 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
PriorityQueue 要素を削除
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
PriorityQueue の繰り返し
優先キューの要素を反復するには、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,
その他の PriorityQueue メソッド
メソッド | 説明 |
---|---|
contains(element) | 指定された要素の優先キューを検索します。要素が見つかった場合、true を返します。 、そうでない場合は false を返します . |
size() | プライオリティ キューの長さを返します。 |
toArray() | プライオリティ キューを配列に変換して返します。 |
PriorityQueue コンパレータ
上記のすべての例で、優先キュー要素は自然な順序 (昇順) で取得されます。ただし、この順序はカスタマイズできます。
このために、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 コンパレーターにアクセスしてください。
Java