Java中Stack类继承Vector,实现LIFO栈结构,提供push、pop、peek等方法,线程安全但性能较低,推荐用ArrayDeque替代。
Java中的Stack类是集合框架的一部分,继承自Vector类,实现了“后进先出”(LIFO)的栈数据结构。它适用于需要临时存储并按逆序取出数据的场景,比如表达式求值、括号匹配、函数调用模拟等。
Stack 是一个动态数组实现的栈,提供了常用的入栈、出栈、查看栈顶等操作。由于它继承自Vector,所以具备线程安全的特性,但在高并发环境下仍建议使用更现代的替代方案。
Vector,天然支持线程同步push()、pop()、peek()等直观方法以下是Stack类中最核心的几个方法及其使用方式:
EmptyStackException
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack stack = new Stack<>();
stack.push("A");
stack.push("B");
stack.push("C");
System.out.println("栈顶元素: " + stack.peek()); // 输出 C
System.out.println("栈是否为空: " + stack.empty()); // 输出 false
while (!stack.empty()) {
System.out.println("弹出: " + stack.pop());
}
// 输出顺序:C → B → A
}
}
虽然Stack类使用简单,但在实际开发中存在一些问题:
Vector带来了不必要的开销,且暴露了非栈操作的方法(如add())Deque替代Stack
import java.util.Deque; import java.util.ArrayDeque; Dequestack = new ArrayDeque<>(); stack.push(1); stack.push(2); System.out.println(stack.pop()); // 输出 2
ArrayDeque作为双端队列,不仅性能更好,而且专门用于实现栈或队列,是目前更推荐的选择。
基本上就这些。了解Stack有助于理解LIFO结构,但在新项目中优先考虑Deque实现栈功能会更高效和规范。