Java の PriorityQueue
- Java での PriorityQueue の宣言
- PriorityQueue への要素の追加
- PriorityQueue からの要素の削除
- PriorityQueue 要素へのアクセス
- PriorityQueue の反復
PriorityQueue は、オブジェクトが優先度に基づいて続行する必要がある場合に使用されます。これも先入れ先出しアルゴリズムに基づいていますが、優先度に基づいて要素を進める必要がある場合があります。そのため、PriorityQueue
が登場します。PriorityQueue
は優先度ヒープに基づいています。PriorityQueue
の要素は自然順序に従って配置され、queue
の構築時に、どのコンストラクターが使用されたかによって異なります。
Java での PriorityQueue の宣言
public class PriorityQueue<E> extends AbstractQueue<E> implements Serializable
ここで、E はこのキューに保持されている要素のタイプです。
PriorityQueue
クラスでさまざまな操作を実行する方法について説明しましょう。
PriorityQueue への要素の追加
アイテムを PriorityQueue
に含めるには、add()
メソッドまたは addition()
メソッドを使用できます。挿入の順序は PriorityQueue
内に保存されません。これらの要素は、デフォルトで昇順の優先順位に従って保存されます。
例:
import java.io.*;
import java.util.*;
public class PriorityQueueDemo {
public static void main(String args[]) {
PriorityQueue<String> pq = new PriorityQueue<>();
pq.add("Welcome");
pq.add("To");
pq.add("Party");
System.out.println(pq);
}
}
出力:
[To, Welcome, Party]
PriorityQueue からの要素の削除
PriorityQueue から要素を削除するには、delete()
メソッドを使用できます。そのようなオブジェクトが複数ある場合、オブジェクトの最初のインスタンスが削除されます。さらに、poll()
メソッドを使用してヘッドを取得し、それを交換することもできます。
import java.io.*;
import java.util.*;
public class PriorityQueueDemo {
public static void main(String args[]) {
PriorityQueue<String> pq = new PriorityQueue<>();
pq.add("Welcome");
pq.add("To");
pq.add("Party");
System.out.println("Initial PriorityQueue " + pq);
pq.remove("Geeks");
System.out.println("After Remove - " + pq);
System.out.println("Poll Method - " + pq.poll());
System.out.println("Final PriorityQueue - " + pq);
}
}
出力:
Initial PriorityQueue [To, Welcome, Party]
After Remove - [To, Welcome]
Poll Method - To
Final PriorityQueue - [Party]
PriorityQueue 要素へのアクセス
キュー
は先入れ先出しの原則に基づいているため、キュー
の先頭にのみアクセスできます。優先度の高い Queue
要素にアクセスするには、peek()
メソッドを使用できます。
例:
// Java program to access elements
// from a PriorityQueue
import java.util.*;
class PriorityQueueDemo {
// Main Method
public static void main(String[] args) {
// Creating a priority queue
PriorityQueue<String> pq = new PriorityQueue<>();
pq.add("Welcome");
pq.add("To");
pq.add("Party");
System.out.println("PriorityQueue: " + pq);
// Using the peek() method
String element = pq.peek();
System.out.println("Accessed Element: " + element);
}
}
出力:
PriorityQueue: [To, Welcome, Party]
Accessed Element: To
PriorityQueue の反復
PriorityQueue
を反復処理する方法はたくさんあります。最もよく知られている方法は、キュー
を配列に変換し、for
ループを使用してそれをトラバースすることです。さらに、キュー
には、キュー
を循環するために使用できる内部イテレータが付属しています。
例:
import java.util.*;
public class PriorityQueueDemo {
public static void main(String args[]) {
PriorityQueue<String> pq = new PriorityQueue<>();
pq.add("Welcome");
pq.add("To");
pq.add("Party");
Iterator iterator = pq.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
}
}
出力:
To Welcome Party