言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Java辞典

  1. トップページ
  2. Java辞典
  3. new ArrayDeque<>() / デキュー.push() / pop()

new ArrayDeque<>() / デキュー.push() / pop()

対応: Java 5(2004)

デキュー(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 を返します。

サンプルコード

sample_DequePushPop.java
import java.util.ArrayDeque;
import java.util.Deque;

class DequePushPop {
    public static void main(String[] args) {
        // スタックとして使用します(後入れ先出し)。
        Deque<String> stack = new ArrayDeque<>();
        stack.push("綾波レイ");
        stack.push("碇シンジ");
        stack.push("惣流アスカ");

        System.out.println(stack.peek());  // 『惣流アスカ』と出力されます(削除しない)。
        System.out.println(stack.pop());   // 『惣流アスカ』と出力されます(削除される)。
        System.out.println(stack.pop());   // 『碇シンジ』と出力されます。

        // 両端キューとして使用します。
        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』と出力されます(取り出し)。
    }
}
javac DequePushPop.java
java DequePushPop
惣流アスカ
惣流アスカ
碇シンジ
0
2
0
2

概要

『ArrayDeque』はスタックとして使う場合、従来の Stack クラスよりも高速です。Stack クラスは Vector を継承しており同期処理のオーバーヘッドがありますが、シングルスレッドの環境では『ArrayDeque』を使用することを推奨します。

『push()』は内部的に addFirst() を、『pop()』は removeFirst() を呼び出します。『pop()』は空のデキューに対して NoSuchElementException をスローするため、事前に isEmpty() で確認してください。

キューの操作(先入れ先出し)については『new LinkedList<>() / offer() / poll() / peek()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。