java如何堆栈
堆栈的实现方法
在Java中,堆栈(Stack)可以通过多种方式实现,以下是常见的几种方法:
使用java.util.Stack类
Java标准库提供了Stack类,直接继承自Vector,支持后进先出(LIFO)操作。
import java.util.Stack;
Stack<Integer> stack = new Stack<>();
stack.push(1); // 入栈
stack.push(2);
int topElement = stack.pop(); // 出栈,返回2
boolean isEmpty = stack.empty(); // 判断是否为空
int peekElement = stack.peek(); // 查看栈顶元素(不弹出)
使用Deque接口(推荐)
Deque(双端队列)是更现代的替代方案,性能优于Stack,推荐使用ArrayDeque实现堆栈。
import java.util.ArrayDeque;
import java.util.Deque;
Deque<Integer> stack = new ArrayDeque<>();
stack.push(1); // 入栈
stack.push(2);
int topElement = stack.pop(); // 出栈,返回2
boolean isEmpty = stack.isEmpty(); // 判断是否为空
int peekElement = stack.peek(); // 查看栈顶元素
手动实现堆栈(基于数组)
通过数组和指针模拟堆栈行为,适合理解底层原理。

public class CustomStack {
private int maxSize;
private int[] stackArray;
private int top;
public CustomStack(int size) {
maxSize = size;
stackArray = new int[maxSize];
top = -1;
}
public void push(int value) {
if (top < maxSize - 1) {
stackArray[++top] = value;
} else {
throw new IllegalStateException("Stack is full");
}
}
public int pop() {
if (top >= 0) {
return stackArray[top--];
} else {
throw new IllegalStateException("Stack is empty");
}
}
public int peek() {
if (top >= 0) {
return stackArray[top];
} else {
throw new IllegalStateException("Stack is empty");
}
}
public boolean isEmpty() {
return (top == -1);
}
}
堆栈的应用场景
- 函数调用:JVM使用调用栈管理方法调用和返回。
- 表达式求值:如中缀表达式转后缀表达式。
- 括号匹配:检查代码中的括号是否成对出现。
- 回溯算法:如深度优先搜索(DFS)。
注意事项
java.util.Stack是线程安全的,但性能较差,非并发场景建议用Deque。- 手动实现时需处理边界条件(如栈满或栈空)。






