知っていると便利な章

4.7. Queue

Collectionを拡張して要素の「キュー操作」を可能にしたものです。

『JDK7 API Javadoc より抜粋』---
処理の前に要素を保持するために設計されたコレクション。 基本的な Collection オペレーションだけでなく、キューは追加の挿入、抽出、および検査オペレーションを提供します。
---

Queueインターフェースでは、Collectionインターフェースの要素の挿入(add)、抽出(remove)、検査(element)を操作するメソッド以外に offer、poll、peekメソッドが定義されています。
これら3つのメソッドは操作失敗時に例外ではなく、戻り値で失敗を伝えます。
キューの容量が限られており、要素の操作失敗が通常のオペレーションで想定される場合はoffer、poll、peekメソッドを使うといいでしょう。

以下のクラスは Queue インターフェースを実装しているクラスです。

LinkedList
通常のリンクリストです。
Listでも紹介しましたが、LinkedListはQueueインターフェースも実装しています。
add、remove、element、(offer、poll、peek)メソッドのみを使用すればLinkedListをFIFOキューとして使うことができます。
また、他のメソッドを使用することによりLIFOキュー(スタック)、両端キュー(デック)としても使うことができます。

ArrayDeque
配列で実装された両端キュー(デック)です。
キューとして使用する場合、要素の挿入(add)はLinkedListよりも高速ですが、要素の抽出(remove)は要素数に比例する時間がかかります。
LinkedListと違い、nullを要素として挿入することはできません。

PriorityQueue
優先度つきキューです。
順序付けはコンストラクタにComparatorが渡された場合はそのComparatorを使って行われます。 コンストラクタにComparatorが渡されない場合は要素の自然順序付けによって行われます。

このように使います。

Queue<String> strings = new LinkedList<>();

// キューに要素を追加
strings.add("あ");
strings.add("い");
strings.add("う");

// キューから要素を抽出 "あ"が抽出される。
String s = strings.remove();

// キューの要素の存在を確認 "い"が確認される。
s = strings.element();

< 前のページへ

Pagetop