Javaのスタック(Stack)のサンプルです。
ArrayDequeクラスを使用します。
確認環境 ・Java 8 |
目次
- ArrayDequeクラス
- Dequeインターフェース
- 要素を追加する (pushメソッド)
- 要素を取得してスタックから削除する (popメソッド)
- 要素を取得してスタックから削除する (pollFirstメソッド) -popメソッドとの違い
- 要素を取得してスタックから削除しない (peekメソッド)
ArrayDequeクラス
- スタックを実現します。
- スタックは、後に入れたデータが、先に取り出されます。(上図参照)
- 「後入れ先出し」といいます。英語では LIFO(Last In First Out)です。
- 以下はJava8 API仕様のArrayDequeクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayDeque.html
Dequeインターフェース
- ArrayDequeクラスはDequeインターフェースを実装しています。
- ArrayDequeクラスをインスタンス化する時、ArrayDequeクラスの独自のメソッドを使用しない限り、通常インターフェイス型の変数に代入します。
- ArrayDequeクラスは、Dequeインターフェースを実装しているので、Dequeインターフェイスにあるメソッドを使用できます。
- 以下はJava8 API仕様のDequeインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Deque.html
要素を追加する (pushメソッド)
要素を追加するサンプルです。
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.push("赤");
colors.push("黄");
colors.push("青");
for (String a : colors) {
System.out.println(a);//青 黄 赤
}
colors.push("白");
for (String a : colors) {
System.out.println(a);//白 青 黄 赤
}
}
}
8行目は、ArrayDequeクラスをインスタンス化してDequeインターフェイス型の変数に代入しています。ジェネリクス<>でオブジェクトの中身はStringであると宣言しています。
10-12行目は、pushメソッドで要素を追加しています。
18行目は、要素を追加しています。
15,21行目は、後に入れたデータが、先に取り出されています。
要素を取得してスタックから削除する (popメソッド)
popメソッドの要素を取得してスタックから削除するサンプルです。
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.push("赤");
colors.push("黄");
colors.push("青");
String b = colors.pop();
System.out.println(colors); //[黄, 赤]
System.out.println(b); //青
}
}
13行目は、変数colorsの最後に追加した要素"青"を取得して変数bにセットしています。変数colorsの要素"青"は削除しています。
要素を取得してスタックから削除する (pollFirstメソッド) -popメソッドとの違い
pollFirstメソッドの要素を取得してスタックから削除するサンプルです。
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.push("赤");
System.out.println(colors.pollFirst()); //赤
System.out.println(colors.pollFirst()); //null
colors.push("青");
System.out.println(colors.pop()); //青
System.out.println(colors.pop()); //例外が発生する
}
}
10,11行目は、pollFirstメソッドです。要素を取得してスタックから削除しています。
11行目の要素がない場合、pollFirstメソッドはnullを返します。
14,15行目は、popメソッドです。要素を取得してスタックから削除しています。
15行目の要素がない場合、popメソッドはjava.util.NoSuchElementExceptionの例外を返します。
要素を取得してスタックから削除しない (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.push("赤");
colors.push("黄");
colors.push("青");
String b = colors.peek();
System.out.println(colors); //[青, 黄, 赤]
System.out.println(b); //青
}
}
13行目は、変数colorsの最後に追加した要素"青"を取得して変数bにセットしています。pollFirst/popメソッドと違い、変数colorsの要素は削除しません。
関連の記事
Java ArrayListの使い方のサンプル
Java LinkedListの使い方のサンプル
Java HashMapの使い方のサンプル
Java LinkedHashMapの使い方のサンプル
Java TreeMapの使い方のサンプル
Java HashSetの使い方のサンプル
Java キュー(Queue)のサンプル(ArrayDequeクラス)