Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
new ArrayDeque<>() / デキュー.push() / pop()
デキュー(Deque: Double Ended Queue)は両端から要素の追加・取り出しができるデータ構造です。『ArrayDeque』はスタック(後入れ先出し)としても、両端キューとしても使えます。スタック操作には『push()』と『pop()』を使用します。
構文
// ArrayDeque を作成します。 Deque<型> デキュー名 = new ArrayDeque<>(); // 先頭に要素を追加します(スタックの push)。 デキュー.push(要素); // 先頭の要素を取り出して削除します(スタックの pop)。 デキュー.pop(); // 先頭の要素を削除せずに確認します。 デキュー.peekFirst(); // 末尾の要素を削除せずに確認します。 デキュー.peekLast();
メソッド一覧
| メソッド | 概要 |
|---|---|
| new ArrayDeque<>() | 配列に基づく両端キューを作成します。スタックやキューとして利用できます。 |
| push(E e) | 先頭に要素を追加します。スタックの push に相当します。 |
| pop() | 先頭の要素を取り出して削除します。スタックの pop に相当します。空の場合は例外をスローします。 |
| peekFirst() | 先頭の要素を削除せずに返します。空の場合は null を返します。 |
| peekLast() | 末尾の要素を削除せずに返します。空の場合は null を返します。 |
サンプルコード
import java.util.ArrayDeque;
import java.util.Deque;
// スタックとして使用します(後入れ先出し)。
Deque<String> stack = new ArrayDeque<>();
stack.push("first");
stack.push("second");
stack.push("third");
System.out.println(stack.peek()); // 『third』と出力されます(削除しない)。
System.out.println(stack.pop()); // 『third』と出力されます(削除される)。
System.out.println(stack.pop()); // 『second』と出力されます。
// 両端キューとして使用します。
Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1); // 先頭に追加します。
deque.addLast(2); // 末尾に追加します。
deque.addFirst(0); // 先頭に追加します。
System.out.println(deque.peekFirst()); // 『0』と出力されます。
System.out.println(deque.peekLast()); // 『2』と出力されます。
System.out.println(deque.pollFirst()); // 『0』と出力されます(取り出し)。
System.out.println(deque.pollLast()); // 『2』と出力されます(取り出し)。
概要
『ArrayDeque』はスタックとして使う場合、従来の Stack クラスよりも高速です。Stack クラスは Vector を継承しており同期処理のオーバーヘッドがありますが、シングルスレッドの環境では『ArrayDeque』を使用することを推奨します。
『push()』は内部的に addFirst() を、『pop()』は removeFirst() を呼び出します。『pop()』は空のデキューに対して NoSuchElementException をスローするため、事前に isEmpty() で確認してください。
キューの操作(先入れ先出し)については『new LinkedList<>() / offer() / poll() / peek()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。