Stack 类概述

Stack 是 Java 中的一个集合类,继承自 Vector,实现了后进先出(LIFO)的栈数据结构。它提供了标准的栈操作方法。

Stack 的主要方法

1. 基本栈操作方法

  • push(E item): 将元素压入栈顶
  • pop(): 移除并返回栈顶元素
  • peek(): 返回栈顶元素但不移除
  • empty(): 判断栈是否为空
  • search(Object o): 返回对象在栈中的位置(从栈顶开始计数,栈顶位置为1)

2. 继承自 Vector 的方法

由于 Stack 继承自 Vector,因此还具备以下常用方法:

  • size(): 返回栈中元素的数量
  • isEmpty(): 判断栈是否为空(功能同 empty()
  • clear(): 清空栈中所有元素
  • contains(Object o): 判断栈是否包含指定元素

Stack 使用示例

Stack<Integer> stack = new Stack<>();

// 压入元素
stack.push(10);
stack.push(20);
stack.push(30);

// 查看栈顶元素
Integer topElement = stack.peek(); // 返回 30,但不移除

// 弹出元素
Integer poppedElement = stack.pop(); // 返回并移除 30

// 检查栈是否为空
boolean isEmpty = stack.empty(); // 返回 false

// 搜索元素位置
int position = stack.search(10); // 返回 2(从栈顶开始计数)

使用场景

  1. 表达式求值: 处理算术表达式的括号匹配和计算
  2. 函数调用模拟: 模拟程序执行过程中的方法调用栈
  3. 撤销操作: 实现软件中的撤销(Undo)功能
  4. 浏览器历史记录: 管理浏览器的后退功能
  5. 深度优先搜索: 在图或树的遍历算法中使用

注意事项

  • Stack 类已经被标记为遗留类,推荐使用 Deque 接口的实现类如 ArrayDeque 替代
  • 使用 pop()peek() 方法前应检查栈是否为空,避免抛出 EmptyStackException 异常
  • Stack 是线程安全的,因为其继承自 Vector,但在高并发场景下性能较差

以上部分内容由大模型生成,注意识别!

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐