当前位置:首页 > 后端开发 > 正文

Java如何快速获取栈顶元素?

在Java中,使用 Stack类时通过 peek()方法获取栈顶元素(不删除),若栈空则抛出 EmptyStackException;推荐用 Deque实现(如 ArrayDeque),同样用 peek()获取,栈空时返回 null。

使用 java.util.Stack 类(传统方式)

Stack 类提供了两种获取栈顶元素的方法:

  1. peek()

    返回栈顶元素但不移除它,若栈为空,抛出 EmptyStackException。

  2. pop()

    返回栈顶元素并移除它,栈空时同样抛出异常。

示例代码:

import java.util.Stack; public class StackExample { public static void main(String[] args) { Stack<String> stack = new Stack<>(); stack.push("Apple"); stack.push("Banana"); // 获取栈顶元素不移除 String topElement = stack.peek(); // 返回 "Banana" System.out.println("栈顶元素: " + topElement); // 获取并移除栈顶元素 String removedElement = stack.pop(); // 返回 "Banana" System.out.println("移除的元素: " + removedElement); } }


使用 Deque 接口(推荐方式)

Java 官方推荐用 Deque(双端队列)替代 Stack 类,因其性能更好且更灵活,常用实现类为 ArrayDeque:

  • peek():查看栈顶元素(不移除)。
  • pop():移除并返回栈顶元素(栈空时抛出 NoSuchElementException)。

示例代码:

import java.util.ArrayDeque; import java.util.Deque; public class DequeExample { public static void main(String[] args) { Deque<String> stack = new ArrayDeque<>(); stack.push("Apple"); stack.push("Banana"); // 获取栈顶元素 String topElement = stack.peek(); // 返回 "Banana" System.out.println("栈顶元素: " + topElement); // 移除栈顶元素 String removedElement = stack.pop(); // 返回 "Banana" System.out.println("移除的元素: " + removedElement); } }


关键注意事项

  1. 空栈处理

    调用 peek() 或 pop() 前需检查栈是否为空:

  2. 异常类型

    • Stack 类:空栈时抛出 EmptyStackException。
    • Deque 实现:空栈时抛出 NoSuchElementException(pop())或返回 null(peek())。
    • 性能对比

      | 操作 | Stack 类 | ArrayDeque |

      |————|————|————–|

      | peek() | O(1) | O(1) |

      | pop() | O(1) | O(1) |

      | 线程安全 | 是(同步) | 否(更快) |

      • 推荐 ArrayDeque:非线程场景下性能更优,且符合现代Java标准。
        • 基础场景:使用 stack.peek() 查看栈顶元素,stack.pop() 移除栈顶元素。
        • 最佳实践:优先选择 Deque(如 ArrayDeque)而非 Stack 类,因前者效率更高、API更一致。
        • 健壮性:始终检查栈是否为空以避免运行时异常。


        引用说明: 基于 Java 官方文档(Oracle JDK 17),参考了 Stack 类和 Deque 接口的规范,示例代码遵循 Java SE 标准语法,已在 OpenJDK 17 环境下验证。

0