java栈如何使用
栈的基本概念
栈是一种遵循后进先出(LIFO)原则的数据结构,仅允许在栈顶进行插入(压栈)和删除(弹栈)操作。Java中可通过java.util.Stack类或Deque接口实现栈的功能。
使用java.util.Stack类
Stack类是Java标准库提供的栈实现,直接继承自Vector类,支持以下核心方法:

push(E item):将元素压入栈顶。pop():移除并返回栈顶元素,若栈为空抛出EmptyStackException。peek():返回栈顶元素但不移除,栈为空时抛出异常。empty():检查栈是否为空。
示例代码:

Stack<Integer> stack = new Stack<>();
stack.push(1); // 压栈
stack.push(2);
System.out.println(stack.pop()); // 输出2(弹栈)
System.out.println(stack.peek()); // 输出1(查看栈顶)
System.out.println(stack.empty()); // 输出false
使用Deque接口(推荐)
由于Stack类基于同步的Vector实现,性能较差,官方推荐使用Deque接口的ArrayDeque或LinkedList实现栈。核心方法:
addFirst(E item)或push(E item):压栈。removeFirst()或pop():弹栈。peekFirst()或peek():查看栈顶。
示例代码:
Deque<Integer> deque = new ArrayDeque<>();
deque.push(1); // 压栈
deque.push(2);
System.out.println(deque.pop()); // 输出2(弹栈)
System.out.println(deque.peek()); // 输出1(查看栈顶)
注意事项
- 线程安全:
Stack是线程安全的,但性能低;Deque实现类非线程安全,需自行同步。 - 容量限制:
ArrayDeque基于数组,初始化时可指定容量;LinkedList无容量限制。 - 空栈处理:调用
pop()或peek()前需检查栈是否为空,避免异常。
应用场景
- 函数调用栈(递归)。
- 表达式求值(如括号匹配)。
- 撤销操作(如编辑器中的回退)。






