Java中Stack是LIFO结构,继承Vector,提供push、pop、peek等操作,适用于括号匹配等回溯场景,但因性能问题,官方推荐用ArrayDeque替代。

在Java中,Stack 是一种典型的后进先出(LIFO, Last In First Out)数据结构。它继承自 Vector 类,位于 java.util 包中,提供了标准的栈操作方法,如 push、pop、peek 等,非常适合用于需要逆序处理数据的场景。
Stack的基本使用方法
创建一个 Stack 对象非常简单,可以直接通过无参构造函数实例化:
Stack常用的操作包括:
- push(E item):将元素压入栈顶
- pop():弹出并返回栈顶元素,如果栈为空会抛出 EmptyStackException
- peek():查看栈顶元素但不移除
- isEmpty():判断栈是否为空
- size():返回栈中元素个数
示例代码:
立即学习“Java免费学习笔记(深入)”;
Stacknumbers.push(10);
numbers.push(20);
numbers.push(30);
System.out.println("栈顶元素: " + numbers.peek()); // 输出 30
System.out.println("弹出元素: " + numbers.pop()); // 输出 30
System.out.println("当前大小: " + numbers.size()); // 输出 2
实际应用场景举例
Stack 常用于解决具有“回溯”特性的编程问题,比如括号匹配、表达式求值、方法调用栈模拟等。
以检查括号是否匹配为例:
public static boolean isValidParentheses(String s) {Stack
for (char c : s.toCharArray()) {
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else {
if (stack.isEmpty()) return false;
char top = stack.pop();
if ((c == ')' && top != '(') ||
(c == ']' && top != '[') ||
(c == '}' && top != '{')) {
return false;
}
}
}
return stack.isEmpty();
}
该方法利用栈的 LIFO 特性,确保每个右括号都能与最近的未匹配左括号配对。
使用建议与注意事项
虽然 Java 提供了 Stack 类,但在实际开发中需要注意以下几点:
- Stack 继承自 Vector,是线程安全的,但性能相对较低
- 官方更推荐使用
Deque接口的实现类(如ArrayDeque)来替代 Stack - 使用 ArrayDeque 实现栈操作更高效且设计更合理
推荐写法:
Dequestack.push(1); // 入栈
stack.pop(); // 出栈
stack.peek(); // 查看栈顶
这种方式语义清晰,性能更好,是现代 Java 编程中的最佳实践。
基本上就这些。掌握 Stack 的基本操作和适用场景,能帮助你在处理递归、回溯、表达式解析等问题时更加得心应手。虽然原生 Stack 可用,但优先考虑 ArrayDeque 会更优。










