(1) JavaのDequeの概要や使い方+サンプルプログラムもご紹介
(1-1) Dequeとは?
(1-2) Dequeを実装したクラス
(1-3) Dequeの使い方
(1-4) Dequeのサンプルプログラム
(1) JavaのDequeの概要や使い方+サンプルプログラムもご紹介
(1-1) Dequeとは?
| ■メソッド名 ※カッコ()内は別名 |
■作用箇所 | ■機能 | ■例外時 |
| addFirst (push) |
先頭 | 追加(挿入) | 例外を発生 |
| offerFirst | 先頭 | 追加(挿入) | falseやnullを返却 |
| removeFirst (pop, remove) |
先頭 | 取得(削除) | 例外を発生 |
| pollFirst (poll) |
先頭 | 取得(削除) | falseやnullを返却 |
| getFirst (element) |
先頭 | 参照(検査) | 例外を発生 |
| peekFirst (peek) |
先頭 | 参照(検査) | falseやnullを返却 |
| addLast (add) |
末尾 | 追加(挿入) | 例外を発生 |
| offerLast (offer) |
末尾 | 追加(挿入) | falseやnullを返却 |
| removeLast | 末尾 | 取得(削除) | 例外を発生 |
| pollLast | 末尾 | 取得(削除) | falseやnullを返却 |
| getLast | 末尾 | 参照(検査) | 例外を発生 |
| peekLast | 末尾 | 参照(検査) | falseやnullを返却 |
(1-2) Dequeを実装したクラス
Dequeインターフェイスを実装したクラスは、以下がJavaのAPIとして用意されています。
(1-3) Dequeの使い方+サンプルプログラム
STEP1:Dequeのインスタンス作成
Dequeのインスタンスは、Dequeインターフェイスを実装したLinkedListクラスやArrayDequeクラスをインスタンス化する事で作れます。
Deque<String> dq1 = new ArrayDeque<>(); Deque<String> dq2 = new LinkedList<>();
STEP2:各メソッドを利用してキューやスタックの操作
(1-4) Dequeのサンプルプログラム
「キュー」のサンプルと「スタック」のサンプルをそれぞれご紹介します。
キューのサンプルプログラム
import java.util.Deque;
import java.util.LinkedList;
public class IT0285_QueueSample {
public static void main(String[] args) {
Deque<String> que = new LinkedList<>();
try {
//「最上」の要素を「挿入」
que.addLast("Apple");
que.addLast("Banana");
que.addLast("Coffee");
System.out.println("# ①:"+que);
//「最上」の要素を「削除」
System.out.printf("### dequeue:%20s\n",que.removeFirst());
//「最上」の要素を「参照」
System.out.printf("### getFirst:%20s\n",que.getFirst());
//「最上」の要素を「挿入」
que.addLast("Donuts");
System.out.println("# ②:"+que);
//「最上」の要素を「削除」
System.out.printf("### dequeue:%20s\n",que.removeFirst());
System.out.printf("### dequeue:%20s\n",que.removeFirst());
System.out.printf("### dequeue:%20s\n",que.removeFirst());
System.out.println("# ③:"+que);
//「最上」の要素を「削除」
//→要素が1つもないため、例外が発生
System.out.printf("### dequeue:%20s\n",que.removeFirst());
} catch (Exception e) {
System.out.println(e);
}
}
}
(図141)実行結果

スタックのサンプルプログラム
import java.util.ArrayDeque;
import java.util.Deque;
public class IT0285_StackSample {
public static void main(String[] args) {
Deque stk = new ArrayDeque<>();
try {
//「最上」の要素を「挿入」
stk.push("Apple");
stk.push("Banana");
stk.push("Coffee");
System.out.println("# ①:"+stk);
//「最上」の要素を「削除」
System.out.printf("### pop:%21s\n",stk.pop());
//「最上」の要素を「参照」
System.out.printf("### peek:%20s\n",stk.peek());
//「最上」の要素を「挿入」
stk.push("Donuts");
System.out.println("# ②:"+stk);
//「最上」の要素を「削除」
System.out.printf("### pop:%21s\n",stk.pop());
System.out.printf("### pop:%21s\n",stk.pop());
System.out.printf("### pop:%21s\n",stk.pop());
System.out.println("# ③:"+stk);
//「最上」の要素を「削除」
//→要素が1つもないため、例外が発生
System.out.printf("### pop:%21s\n",stk.pop());
} catch (Exception e) {
System.out.println(e);
}
}
}
(図142)実行結果
