Java キュー(Queue)のサンプル(ArrayDequeクラス)

Javaのキュー(Queue)のサンプルです。
ArrayDequeクラスを使用します。

目次

ArrayDequeクラス

public class ArrayDeque<E> extends AbstractCollection<E>
implements Deque<E>, Cloneable, Serializable
  • キューを実現します。
  • キューとは、先に入れたデータが、先に取り出されることです。(下図参照)
    「先入れ先出し」といいます。英語では FIFO(First In First Out)です。
  • ArrayDequeクラスは、Java 6で導入されました。
  • 各項目を要素(element)といいます。
  • 以下はOracleのJava8 API仕様のArrayDequeクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayDeque.html

Dequeインターフェース

public interface Deque<E> extends Queue<E>

  • ArrayDequeクラスはDequeインターフェースを実装しています。
  • ArrayDequeクラスをインスタンス化する時、ArrayDequeクラスの独自のメソッドを使用しない限り、通常インターフェイス型の変数に代入します。
  • ArrayDequeクラスは、Dequeインターフェースを実装しているので、Dequeインターフェイスにあるメソッドを使用できます。
  • 以下はOracleのJava8 API仕様のDequeインターフェースのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/util/Deque.html

要素を追加する (addメソッド)

public boolean add(E e)

要素を追加するサンプルです。

package test1;
import java.util.ArrayDeque;
import java.util.Deque;

public class Test1 {
    public static void main(String[] args) {
        
    	Deque<String> colors = new ArrayDeque<>();
        
        colors.add("赤");
        colors.add("黄");
        colors.add("青");
        
        for (String a : colors) {
            System.out.println(a);//赤 黄 青
        }
        
        colors.add("白");
        
        for (String a : colors) {
            System.out.println(a);//赤 黄 青 白
        }
    }
 }

8行目は、ArrayDequeクラスをインスタンス化してDequeインターフェイス型の変数に代入しています。ジェネリクス<>でオブジェクトの中身はStringであると宣言しています。
10~12行目は、addメソッドで要素を追加しています。
18行目は、要素を追加しています。
15,21行目は、先に入れたデータが、先に取り出されています。

 

要素を取得してキューから削除する (pollメソッド)

public E poll()

要素を取得してキューから削除するサンプルです。

package test1;
import java.util.ArrayDeque;
import java.util.Deque;

public class Test1 {
    public static void main(String[] args) {
        
    	Deque<String> colors = new ArrayDeque<>();
        colors.add("赤");
        colors.add("黄");
        
        String a = colors.poll();
        System.out.println(a); //赤 
        System.out.println(colors); //[黄]
        
        String b = colors.poll();
        System.out.println(b); //黄 
        System.out.println(colors); //[]

        String c = colors.poll();
        System.out.println(c); //null
        System.out.println(colors); //[]
    }
 }

12~18行目は、pollメソッドでキューから要素を取得してキューの要素を削除しています。
20行目は、要素がない変数に対してpollメソッドを実行しています。
21行目は、nullになります。エラーになりません。

 

要素を取得してキューから削除する (removeメソッド) 

public E remove()

要素を取得してキューから削除するサンプルです。

package test1;
import java.util.ArrayDeque;
import java.util.Deque;

public class Test1 {
    public static void main(String[] args) {
        
    	Deque<String> colors = new ArrayDeque<>();
        colors.add("赤");
        colors.add("黄");
        
        String a = colors.remove();
        System.out.println(a); //赤 
        System.out.println(colors); //[黄]
        
        String b = colors.remove();
        System.out.println(b); //黄 
        System.out.println(colors); //[]

        String c = colors.remove(); //例外が発生
        //System.out.println(c); //
        //System.out.println(colors); //
    }
 }

12~18行目は、removeメソッドでキューから要素を取得してキューの要素を削除しています。
20行目は、要素がない変数に対してremoveメソッドを実行しています。java.util.NoSuchElementExceptionの例外が発生が発生します。

 

要素を取得してキューから削除しない (peekメソッド)

public E peek()

要素を取得してキューから削除しないサンプルです。

package test1;
import java.util.ArrayDeque;
import java.util.Deque;

public class Test1 {
    public static void main(String[] args) {
        
    	Deque<String> colors = new ArrayDeque<>();
        colors.add("赤");
        colors.add("黄");
        colors.add("青");
        
        String b = colors.peek();
        
        System.out.println(colors); //[赤, 黄, 青]
        
        System.out.println(b); //赤
    }
 }

13行目は、最初に追加した要素"赤"を取得して変数bにセットしています。pollメソッドやremoveメソッドと違い、要素は削除しません。

関連の記事

Java ArrayListの使い方のサンプル
Java LinkedListの使い方のサンプル
Java HashMapの使い方のサンプル
Java LinkedHashMapの使い方のサンプル
Java TreeMapの使い方のサンプル
Java HashSetの使い方のサンプル
Java スタック(Stack)のサンプル(ArrayDequeクラス)

△上に戻る