Javaの優先度付きキュー「PriorityQueue」の解説
Javaのプライオリティキューは優先度に基づくキューで、要素は優先度の順序で並び替えられ、優先度の高い要素がキューの先頭、優先度の低い要素がキューの最後に位置します。
Javaの優先順位キューはヒープデータ構造を使用しており、その背後には完全2分木があり、各ノードの値はその子ノードの値以上(または以下)です。このデータ構造は配列で表すことができ、配列のインデックスはノードのインデックスを表し、配列の要素はノードの値を表します。
Javaの優先キューは、タスクのスケジュールやイベント駆動など、さまざまな問題を解決するために使用できます。以下は、Javaの優先キューに関する一般的な操作です。
- 優先キューを作成する:
PriorityQueue<Integer> pq = new PriorityQueue<>();
- 要素を挿入する:
pq.offer(10);
- 隊頭要素を削除して返します:
pq.poll();
- 先頭の要素を返す (取り除きません)
pq.peek();
- キューが空かどうかを判定する。
pq.isEmpty();
- キュー内の要素数を取得
pq.size();
- カスタムコンパレータ:
初期化時にコンパレータを指定することで、優先度付きキューを要素の自然順序以外のカスタムコンパレータでソートすることができます。
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);
優先順位付きキューは、上記のコードでは要素の降順でソートされます。
注意してください。
- 要素を挿入する際には優先度に応じてソートする
- 要素を削除すると、優先順位キューは要素の順番を自動的に調整し、最優先の要素がキューの先頭に来るようにします。
Javaの優先度キューPriorityQueueは、優先度に関わる問題を扱うための便利な方法を提供しており、優先度キューを適切に使用する事で、コードの効率と可読性を向上させる事ができます。