Stack类继承Vector,提供push、pop、peek等方法实现LIFO栈操作,但因性能和封装问题,推荐用ArrayDeque替代。

Java 中的 Stack 是一个继承自 Vector 的类,用于实现后进先出(LIFO)的栈结构。它提供了常见的栈操作方法,如入栈、出栈、查看栈顶元素等。虽然在实际开发中更推荐使用 Deque 接口的实现类(如 ArrayDeque)来替代 Stack,但理解 Stack 类的使用仍然有助于掌握基础数据结构的应用。
Stack 类的基本使用方法
要使用 Stack,首先需要创建一个 Stack 对象,并指定泛型类型。例如:
Stackstack = new Stack<>();
常用方法包括:
- push(E item):将元素压入栈顶
- pop():移除并返回栈顶元素,如果栈为空则抛出 EmptyStackException
- peek():返回栈顶元素但不移除,栈为空时同样抛异常
- empty():判断栈是否为空,空则返回 true
- search(Object o):查找元素在栈中的位置(从1开始计数),找不到返回 -1
常见操作示例
以下是一个简单的使用示例:
立即学习“Java免费学习笔记(深入)”;
Stackstack = new Stack<>(); stack.push("A"); stack.push("B"); stack.push("C"); System.out.println(stack.peek()); // 输出 C System.out.println(stack.pop()); // 输出 C System.out.println(stack.pop()); // 输出 B System.out.println(stack.empty()); // false System.out.println(stack.search("A")); // 输出 1
这段代码展示了入栈、查看、出栈和搜索的基本流程。注意 pop 和 peek 方法在空栈上调用会抛出异常,因此建议在调用前使用 empty() 判断。
注意事项与替代方案
尽管 Stack 类使用简单,但它存在一些设计上的问题:
- 继承 Vector 导致拥有许多不必要的同步操作,影响性能
- 暴露了父类的非栈操作方法(如 add、remove 等),破坏了封装性
因此,在实际项目中更推荐使用:
Dequestack = new ArrayDeque<>(); stack.push(1); stack.push(2); System.out.println(stack.pop()); // 输出 2
ArrayDeque 实现了双端队列,作为栈使用时效率更高,且无多余方法暴露。
基本上就这些。Stack 类适合学习理解栈的原理,但在生产环境中优先考虑 Deque 的实现。










