java.util.Stack の pop() と peek() 動作確認メモ
挙動確認に関するブログ等が無かったため、メモ。
API 上で確認出来ることを以下に。
public E pop()
スタックの先頭のオブジェクトを削除し、そのオブジェクトを関数の値として返します
戻り値:スタックの先頭にあるオブジェクト(Vectorオブジェクトの最後の項目)。
例外:EmptyStackException - このスタックが空の場合
(https://docs.oracle.com/javase/jp/8/docs/api/java/util/Stack.html#pop--)
public E peek()
スタックの先頭にあるオブジェクトを取り出します。このときオブジェクトはスタックから削除されません。
戻り値:スタックの先頭にあるオブジェクト(Vectorオブジェクトの最後の項目)。
例外:EmptyStackException - このスタックが空の場合
(https://docs.oracle.com/javase/jp/8/docs/api/java/util/Stack.html#peek--)
peekの場合.java
public static void main(String[] args) {
try {
Stack<String> stack = new Stack();
stack.push("Good Morning!");
stack.push("Hello!");
stack.peek();
stack.stream().forEach(System.out::println);
// Good Morning!
// Hello!
} catch (EmptyStackException e) {
System.out.println("stack が空です");
}
}
popの場合.java
public static void main(String[] args) {
try {
Stack<String> stack = new Stack();
stack.push("Good Morning!");
stack.push("Hello!");
stack.pop();
stack.stream().forEach(System.out::println);
// Good Morning!
} catch (EmptyStackException e) {
System.out.println("stack が空です");
}
}
pop の場合は stack から取り出され、 peek は stack から取り出されません。
peek の API を見ると戻り値を返しますので、 値を検証しながら pop することが可能です。
検証しながらpopする.java
public static void main(String[] args) {
try {
Stack<String> stack = new Stack();
stack.push("Good Morning!");
stack.push("Hello!");
if (stack.peek().equals("Hello!")) {
stack.pop();
}
System.out.println(stack.peek());
// Good Morning!
} catch (EmptyStackException e) {
System.out.println("stack が空です");
}
}