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

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

目次

説明 ArrayDequeクラスとは
  ArrayDequeクラスとDequeインターフェースの関係
サンプル 要素を追加する (addメソッド)
  要素を取得してキューから削除する (pollメソッド)
  要素を取得してキューから削除する (removeメソッド) 
  要素を取得してキューから削除しない (peekメソッド)

ArrayDequeクラスとは

Deque<String> color = new ArrayDeque<>();
color.add("赤");
color.add("青");

1つの変数で複数の値を保持できます。

上記はArrayDequeクラスをインスタンス化してDequeインターフェイス型の変数に代入しています。 この変数colorは複数の値(赤と青)を持ちキューとして使用できます。
※スタックとしても使用可能です。
<>はジェネリクスです。変数colorの各値はStringのみセット可能です。

 

ArrayDequeの変数のイメージ(キュー)

 

キューの機能

キューとは、先に入れたデータが、先に取り出されることです。
先入れ先出し」といいます。英語では FIFO(First In First Out)です。

要素

各項目を要素(element)といいます。
1つの変数で同じ型の複数の値を保持できます。
値は、StringやIntegerなどの参照型です。int等の基本型は使用できません。

以下はOracleのJava8 API仕様のArrayDequeクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayDeque.html

 

ArrayDequeクラスとDequeインターフェースの関係

public class ArrayDeque<E>
extends AbstractCollection<E>
implements Deque<E>, Cloneable, Serializable

ArrayDequeクラスはDequeインターフェースを実装しています。

使用例

Deque<String> a = new 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);//赤 黄 青 FIFO(First In First Out)
        }

        colors.add("白");// 追加

        for (String a : colors) {
            System.out.println(a);//赤 黄 青 白 FIFO(First In First Out)
        }
    }
 }

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

要素を取得してキューから削除する (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); //[]
    }
 }

11,15行目は、pollメソッドでキューから要素を取得してキューの要素を削除しています。
19行目は、要素がない変数に対してpollメソッドを実行しています。エラーになりません。(removeとの違い)
20行目は、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); //
    }
 }

11,15行目は、removeメソッドでキューから要素を取得してキューの要素を削除しています。
19行目は、要素がない変数に対してremoveメソッドを実行しています。java.util.NoSuchElementExceptionの例外が発生が発生します。(pollとの違い)

要素を取得してキューから削除しない (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); //赤
    }
 }

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

関連の記事

Java スタック(Stack)のサンプル(ArrayDequeクラス)

△上に戻る