上一篇
Java如何快速获取栈顶元素?
- 后端开发
- 2025-07-03
- 4
在Java中,使用
Stack
类时通过
peek()
方法获取栈顶元素(不删除),若栈空则抛出
EmptyStackException
;推荐用
Deque
实现(如
ArrayDeque
),同样用
peek()
获取,栈空时返回
null
。
使用 java.util.Stack
类(传统方式)
Stack
类提供了两种获取栈顶元素的方法:
peek()
返回栈顶元素但不移除它,若栈为空,抛出EmptyStackException
。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); } }
关键注意事项
-
空栈处理
调用peek()
或pop()
前需检查栈是否为空:if (!stack.isEmpty()) { String element = stack.peek(); // 安全操作 } else { System.out.println("栈为空!"); }
-
异常类型
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 环境下验证。