java中stack类是vector子类,提供lifo栈操作,但官方推荐用deque(如arraydeque)替代,因其为遗留类、有同步开销且设计不严谨;常用方法包括push、pop、peek、isempty和search。

Java 中的 Stack 类是 Vector 的子类,提供了标准的后进先出(LIFO)栈操作。虽然它功能可用,但官方文档明确建议优先使用 Deque(如 ArrayDeque)替代,因为 Stack 是遗留类,存在同步开销且设计不够严谨。
基本用法:创建与核心操作
通过 new Stack() 创建实例,常用方法包括:
- push(E item):将元素压入栈顶
-
pop():移除并返回栈顶元素;若栈为空,抛出
EmptyStackException - peek():仅查看栈顶元素不移除;空栈时同样抛异常
-
empty():判断栈是否为空(推荐用
isEmpty(),语义更清晰) - search(Object o):返回元素从栈顶开始的位置(1 为栈顶),未找到返回 -1
简单示例:字符串逆序输出
输入 "hello",利用栈反转字符顺序:
Stack<character> stack = new Stack();
for (char c : "hello".toCharArray()) {
stack.push(c);
}
while (!stack.isEmpty()) {
System.out.print(stack.pop()); // 输出:olleh
}</character>
注意线程安全与性能问题
Stack 继承自 Vector,所有方法默认同步,带来不必要的性能开销。如果不需要线程安全,应改用 ArrayDeque:
- 用
Deque<string> stack = new ArrayDeque();</string>替代 - 压栈:用
push()或addFirst() - 弹栈:用
pop()(等价于removeFirst()) - 查看栈顶:用
peek()(等价于peekFirst())
避免常见错误
使用 Stack 时需留意:
- 不要用
size() == 0判断空栈,而应始终用isEmpty() - 调用
pop()或peek()前务必检查非空,否则运行时异常 -
search()返回的是“距离栈顶的位置”,不是索引,且从 1 开始计数 - 泛型类型必须明确,如
Stack<integer></integer>,避免原始类型导致类型不安全
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











