java の Queue の使い方は?
JavaにおけるQueueは、先入れ先出し(FIFO)の原則で要素を管理するデータ構造です。Queueインターフェイスは、要素の追加、削除、検査を行うメソッドを定義しています。
一般的なキューの実装クラスには以下があります。
- LinkedList:リンクドリストに基づくキュー。双方向キューとして利用可能。
- 配列ベースの双方向キューである ArrayDeque は、キューやスタックとして使用できます。
- 優先度キュー: 優先度ヒープに基づいたキューで、要素は優先度順に並んでいる。
- BlockingQueue: キューが空または一杯のときに待機する機能を提供する、ブロックキューのインターフェース。
Queue のよく使われるメソッドとしては、例えば以下が挙げられます。
- add(element) : キューの最後に要素を追加します。 キューがいっぱいの場合は例外がスローされます。
- offer(要素): キューの最後に要素を追加し、キューが一杯の場合はfalseを返す。
- remove():キューの先頭要素を取り出し、キューが空の場合は例外をスローする。
- poll(): キューの先頭要素を取り出して、キューが空の場合はnullを返します。
- 要素の取得: キューの先頭の要素を取得するが、削除しない。キューが空の場合は例外をスローする。
- peek():キューの先頭の要素を何も削除しないで取得し、キューが空の場合はnullを返す。
キューを使用する一例を以下に示します。
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.offer("A"); // 添加元素到队列尾部
queue.offer("B");
queue.offer("C");
System.out.println(queue); // 输出队列:[A, B, C]
String element = queue.poll(); // 移除队列头部的元素
System.out.println(element); // 输出被移除的元素:A
System.out.println(queue); // 输出队列:[B, C]
String peekElement = queue.peek(); // 获取队列头部的元素
System.out.println(peekElement); // 输出队列头部的元素:B
}
}
注意:マルチスレッド環境では、スレッドセーフ性を保証するために、BlockingQueueの使用を優先してください。