モジュール java.base
パッケージ java.util

インタフェースDeque<E>

型パラメータ:
E - この両端キューに保持されている要素の型
すべてのスーパー・インタフェース:
Collection<E>, Iterable<E>, Queue<E>, SequencedCollection<E>
既知のすべてのサブインタフェース:
BlockingDeque<E>
既知のすべての実装クラス:
ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList

public interface Deque<E> extends Queue<E>, SequencedCollection<E>
両端で要素の挿入および削除をサポートする線形コレクションです。 deque」という名前は、「double ended queue」(両端キュー)の省略形であり、通常は「デック」と発音されます。 Dequeのほとんどの実装では格納可能な要素の数に固定された制限はありませんが、このインタフェースでは、容量が制限された両端キューと、固定サイズ制限のない両端キューをサポートしています。

このインタフェースは、両端キューの両端にある要素にアクセスするメソッドを定義します。 要素を挿入、削除、および検査するためのメソッドが提供されています。 これらのメソッドにはそれぞれ、2つの形式があります。1つは操作が失敗したときに例外をスローし、もう1つは特殊な値(操作に応じてnullまたはfalseのいずれか)を返します。 後者の形式の挿入操作は、容量の制限されたDeque実装用として特別に設計されたものですが、ほとんどの実装では挿入操作は失敗できません。

前述の12個のメソッドについて次の表にまとめます。

Dequeメソッドのサマリー
最初の要素(先頭) 最後の要素(末尾)
例外のスロー 特殊な値 例外のスロー 特殊な値
挿入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
削除 removeFirst() pollFirst() removeLast() pollLast()
調査 getFirst() peekFirst() getLast() peekLast()

このインタフェースは、Queueインタフェースを拡張します。 両端キューがキューとして使用される場合、FIFO (先入れ先出し)動作になります。 要素は両端キューの末尾に追加され、先頭から削除されます。 Queueインタフェースから継承されたメソッドは、次の表に示すようにDequeメソッドと完全に等価です。

QueueメソッドとDequeメソッドの比較
Queueメソッド 等価なDequeメソッド
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()

両端キューは、LIFO (後入れ先出し)スタックとして使用することもできます。 .従来のStackクラスよりもこのインタフェースを優先して使用してください。 両端キューがスタックとして使用される場合、両端キューの先頭から要素のプッシュとポップが行われます。 スタック・メソッドは、次の表に示すようにDequeメソッドと同等です。

StackメソッドとDequeメソッドの比較
Stackメソッド 等価なDequeメソッド
push(e) addFirst(e)
pop() removeFirst()
peek() getFirst()

両端キューがキューまたはスタックとして使用される場合、peekメソッドも同様に機能します。どちらの場合も、要素は両端キューの先頭から取り出されます。

このインタフェースには、内部要素を削除するための2つのメソッドremoveFirstOccurrenceおよびremoveLastOccurrenceがあります。

Listインタフェースとは異なり、このインタフェースはインデックスで要素にアクセスするためのサポートを提供しません。

Deque実装では、null要素の挿入を禁止することが厳密には必要ありませんが、禁止することを強くお薦めします。 null要素が許可されたDeque実装のユーザーは、nullを挿入する機能を利用しないことを強くお薦めします。 これは、nullが、デキューが空であることを示す様々なメソッドによって特殊な戻り値として使用されるためです。

通常、Deque実装は要素ベースのequalsメソッドおよびhashCodeメソッドを定義しませんが、Objectクラスからアイデンティティ・ベースのメソッドを継承します。

このインタフェースは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.6