java如何用栈
栈的基本概念
栈是一种遵循后进先出(LIFO)原则的数据结构,核心操作包括:

- push:将元素压入栈顶。
- pop:移除并返回栈顶元素。
- peek:查看栈顶元素但不移除。
- isEmpty:检查栈是否为空。
Java中可通过java.util.Stack类或Deque接口(推荐)实现栈操作。

方法1:使用 java.util.Stack
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// 压入元素
stack.push(10);
stack.push(20);
// 弹出栈顶元素
int top = stack.pop(); // 返回20
System.out.println("Popped: " + top);
// 查看栈顶元素
int peek = stack.peek(); // 返回10
System.out.println("Peek: " + peek);
// 检查栈是否为空
boolean empty = stack.isEmpty();
System.out.println("Is empty: " + empty);
}
}
方法2:使用 Deque(推荐)
ArrayDeque比Stack更高效,是Java官方推荐的方式:
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeStackExample {
public static void main(String[] args) {
Deque<Integer> stack = new ArrayDeque<>();
stack.push(30);
stack.push(40);
int top = stack.pop(); // 返回40
System.out.println("Popped: " + top);
int peek = stack.peek(); // 返回30
System.out.println("Peek: " + peek);
}
}
方法3:手动实现栈
自定义栈的底层通常基于数组或链表:
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 StackOverflowError("Stack is full");
}
}
public int pop() {
if (top >= 0) {
return stackArray[top--];
} else {
throw new IllegalStateException("Stack is empty");
}
}
public int peek() {
return stackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
}
常见应用场景
- 函数调用栈:JVM使用栈管理方法调用。
- 表达式求值:如逆波兰表达式(后缀表达式)。
- 括号匹配:检查代码中的括号是否成对。
- 撤销操作:编辑器中的撤销功能通常依赖栈。
注意事项
Stack类是线程安全的,但性能较差,单线程环境推荐Deque。- 手动实现时需处理边界条件(如栈满或栈空)。
- 栈的递归调用可能导致栈溢出(
StackOverflowError)。






