Java Dequeインターフェース完全マスター:特徴、メソッド、実践例
Java Dequeインターフェース
JavaのDequeインターフェースがいかに多機能な両端キューを提供し、その強力なメソッドを実コードで活用するかを解説します。
Dequeの仕組み
従来のキューが後ろにエンキューし前からデキューするだけなのに対し、Deque(両端キュー)では両端から要素の追加と削除が可能です。この柔軟性により、LIFO、FIFO、より複雑なデータ処理パターンに対応できます。

Dequeを実装するクラス
Dequeを扱うには、以下の具体的な実装から選択します:
ArrayDeque- 高速で非同期アクセスを提供するサイズ可変配列LinkedList- null要素をサポートし、堅牢な挿入パフォーマンスを提供する双方向リンクリスト

コードでのDequeの使用
まずインターフェースをインポートします:
import java.util.Deque;
次に具体的なクラスをインスタンス化します:
// 配列実装
Deque<String> animal1 = new ArrayDeque<>();
// LinkedList実装
Deque<String> animal2 = new LinkedList<>();
これらのオブジェクトはすべてのDeque操作を公開します。
Dequeの主要メソッド
DequeはQueueを拡張するため、すべてのキュー メソッドを継承します。さらに、両端用の特殊操作を提供します:
- addFirst(e) -
eを先頭に挿入。デックが満杯の場合は例外をスロー。 - addLast(e) -
eを末尾に追加。デックが満杯の場合は例外をスロー。 - offerFirst(e) - 先頭への挿入を試み、満杯の場合は
falseを返す。 - offerLast(e) - 末尾への追加を試み、満杯の場合は
falseを返す。 - getFirst() / getLast() - 最初/最後の要素を取得。空の場合は例外をスロー。
- peekFirst() / peekLast() - 最初/最後の要素を取得。空の場合は
nullを返す。 - removeFirst() / removeLast() - 最初/最後の要素を削除して返す。空の場合は例外をスロー。
- pollFirst() / pollLast() - 最初/最後の要素を削除して返す。空の場合は
nullを返す。
Dequeとしてのスタック利用
レガシーのStackクラスは同期化されており効率が劣ります。Dequeはモダンで非同期の代替手段を提供します:
push(e)-eを先頭に追加pop()- 先頭要素を削除して返すpeek()- 先頭要素を削除せずに取得
ArrayDequeによる実践例
import java.util.Deque;
import java.util.ArrayDeque;
class Main {
public static void main(String[] args) {
Deque<Integer> numbers = new ArrayDeque<>();
// デックに要素を追加
numbers.offer(1); // 末尾
numbers.offerLast(2); // 末尾
numbers.offerFirst(3); // 先頭
System.out.println("Deque: " + numbers);
// 両端を覗く
System.out.println("最初の要素: " + numbers.peekFirst());
System.out.println("最後の要素: " + numbers.peekLast());
// 要素を削除
System.out.println("削除された最初の要素: " + numbers.pollFirst());
System.out.println("削除された最後の要素: " + numbers.pollLast());
System.out.println("更新後のDeque: " + numbers);
}
}
出力
Deque: [3, 1, 2] 最初の要素: 3 最後の要素: 2 削除された最初の要素: 3 削除された最後の要素: 2 更新後のDeque: [1]
詳細については公式Java ArrayDequeドキュメントを参照してください。
Java
- C#インターフェイスをマスターする:定義、実装、実践的なユースケース
- C#のインターフェース:堅牢なオブジェクト指向設計のための契約定義
- Java演算子をマスター:種類、構文、実践例
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
- Javaアノテーション完全ガイド:種類、配置場所、実践例
- Java NavigableSetインターフェースをマスター:ナビゲーション、ソート、実践例
- Javaラムダ式完全ガイド:基礎からStream APIまで
- Java インターフェース vs 抽象クラス:適切な抽象化の選び方
- Javaインターフェース完全ガイド: 定義・実装・多重継承・タグインターフェース
- Java 9プライベートインターフェースメソッド:カプセル化とコード再利用を強化