LoginSignup
2
1

More than 3 years have passed since last update.

java.util.Stack の pop() と peek() の違い

Last updated at Posted at 2020-04-06

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 が空です");
  }
}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1