Java Stack 类全面指南:用法、核心方法与实战示例
Java Stack 类
本教程详细讲解 Java Stack 类、其核心方法,并通过实战示例帮助你掌握栈操作。
Java 集合框架包含 Stack 类,实现了经典的栈数据结构。根据 官方 Java 文档,Stack 继承自 Vector,继承了其所有方法,并额外提供了栈特有的操作。

栈的实现原理
栈遵循 后进先出(LIFO) 原则:元素压入栈顶,从栈顶弹出。下图演示了这一行为。

创建 Stack
导入 java.util.Stack 并用泛型实例化:
Stack<Type> stack = new Stack<>();
示例:
// Integer 栈
Stack<Integer> intStack = new Stack<>();
// String 栈
Stack<String> stringStack = new Stack<>();
Stack 的核心方法
除了继承自 Vector 的方法,Stack 还提供了五个专用操作,使其区别于通用集合。完整的 Vector 方法请参考 Vector 类文档。
push() 方法
push() 将元素压入栈顶。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
}
}
输出
Stack: [Dog, Horse, Cat]
pop() 方法
pop() 移除并返回栈顶元素。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("初始 Stack: " + animals);
String removed = animals.pop();
System.out.println("移除的元素: " + removed);
}
}
输出
初始 Stack: [Dog, Horse, Cat] 移除的元素: Cat
peek() 方法
peek() 获取栈顶元素但不移除。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
String top = animals.peek();
System.out.println("栈顶元素: " + top);
}
}
输出
Stack: [Dog, Horse, Cat] 栈顶元素: Cat
search() 方法
search() 返回元素从栈顶起的 1 基数位置,若不存在返回 -1。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
int pos = animals.search("Horse");
System.out.println("Horse 的位置: " + pos);
}
}
输出
Stack: [Dog, Horse, Cat] Horse 的位置: 2
empty() 方法
empty() 检查栈是否为空。
import java.util.Stack;
class Main {
public static void main(String[] args) {
Stack<String> animals = new Stack<>();
animals.push("Dog");
animals.push("Horse");
animals.push("Cat");
System.out.println("Stack: " + animals);
boolean isEmpty = animals.empty();
System.out.println("栈是否为空? " + isEmpty);
}
}
输出
Stack: [Dog, Horse, Cat] 栈是否为空? false
推荐使用 ArrayDeque 替代 Stack
Stack 虽实现了栈,但被视为遗留类。现代 Java 代码推荐使用 ArrayDeque(实现 Deque 接口)实现栈功能,因其性能更好、语义更清晰。详见:
java
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 精通 Java 继承:核心概念、类型与实战示例
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 精通 Java ArrayList:操作、方法与最佳实践
- Java HashSet 类完全指南:操作、方法与集合论实战
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除