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メソッドと違い、要素は削除しません。
関連の記事