CodeGym /Java 博客 /随机的 /Java Stack 101:深入 Stack 类
John Squirrels
第 41 级
San Francisco

Java Stack 101:深入 Stack 类

已在 随机的 群组中发布
Java 中的堆栈是一种数据结构,很像队列、数组、链表或树它与其他堆栈的不同之处在于,Java堆栈基于后进先出 (LIFO) 原则。这意味着当您使用这两个命令从堆栈中添加和删除一个元素时,您删除的第一个将始终是您添加的最后一个。让我们仔细看看 Java Stack

探索 Java 堆栈类

Java Stack类是Vector类的扩展,它本身扩展了List类。因为向量是可变的并且可以随着内部元素的需求而增长和收缩,所以Stack也可以根据需要改变大小。Vector类的扩展添加了五个将Vector转换为Stack 的操作。这五个操作是:
  • .push(E item) – 将一个元素放到栈顶
  • .pop() – 移除栈顶元素并将其作为函数值返回
  • .peek() – 查看堆栈顶部的元素而不删除它
  • .empty() – 用于测试堆栈是否为空的布尔函数。返回 0 或 1。
  • .search(Object o) – 寻找 o 并返回它的位置。该值从 1 开始,而不是从 0 开始
Stack还继承了属于Vector的所有方法,包括但不限于toString()contains()indexOf()lastElement()Java Stack 101:深入研究 Stack 类 - 1

编写 Java 堆栈示例

现在我们知道Stack的功能,让我们编写一个 Java 堆栈示例。Stack对于处理必须临时存储和快速检索的数据非常有用。因为Stack是 LIFO,所以在探索树数据结构时它对于节点遍历非常有用。在我们进入所有这些之前,让我们创建一个基本堆栈。实现栈的代码如下:

import java.util.*;

class Main {
  public static void main(String[] args) {
    Stack<Integer> stackExample = new Stack<Integer>();
这就是创建空Stack 所需要做的全部工作。您也可以只声明它而不声明数据类型,方法是:

Stack example = new Stack();
请记住,因为Stack是可变的,当我们将元素压入堆栈时,它会自动调整大小。现在让我们看看如何使用Stack函数。

Java 堆栈实现

让我们看看如何使用我们之前简要探讨过的五种方法。如果将 Java 栈的实现想象成一堆盘子,就很容易记住。你把盘子放在堆栈上,但要得到一个盘子,你不会走到底部,你会从顶部得到一个。你穿的最后一件是你脱下的第一件。用stackExample扩展我们之前的例子,函数如下:


// pushing integers onto the Stack
    stackExample.push(5);
    stackExample.push(10);
在这一点上,我们将展示其他函数,就像我们每次都将这两个整数压入 Java 堆栈示例一样。

流行音乐


//popping integers off of the Stack
System.out.println(stackExample.pop());
System.out.println(stackExample.pop());
输出:

10
5

是空的

现在,假设您想从Stack中删除所有元素,但您不确定有多少元素。您可以将Boolean.isEmpty()函数与前提条件 while 循环结合使用,以弹出Stack中的所有元素。看看这个java栈实现是怎么做的。

while(!stackExample.isEmpty()) {      
  System.out.println(stackExample.pop());
}
输出

10
5

窥视

我们可以使用.peek()作为 Java 中的堆栈实现来查看堆栈中的下一项而不删除它。

System.out.println(stackExample.peek());
输出

10
如果我们弹出并打印堆栈,它将返回 10 和 5,因为 10 仍在堆栈中。我们只是看了一下,并没有用pop函数去掉。peek 函数是java 中Stack的一个很好的工具。

搜索

如果我们想找到一个特定的元素,Java 中的堆栈实现使用.search(e); 找到它。

System.out.println(stackExample.search(5));
输出

2
请记住,这是因为我们从Stack 的顶部开始计数,而 Java Stack从 1 开始,而不是像Array那样从 0 开始。所以,看看堆栈,它是 (10) --> (5),5 在第 2 个位置。如果您尝试查找不在Stack中的元素,您将得到 -1 作为输出。

迭代

在处理任何集合时,有时您可能需要查找多个元素。为了节省复杂性和不必多次搜索堆栈,您可以使用迭代。由于Java 中的Stack扩展了List类,因此有多种迭代选项。最简单的方法之一是只使用ListIterator函数。ListIterator很好,因为它允许您使用.hasPrevious().hasNext()从上到下或从下到上遍历Stack。这是它的样子:

ListIterator<Integer> exampleIterator = stackExample.listIterator(stackExample.size());

  while (exampleIterator.hasPrevious()) {
    int iteration = exampleIterator.previous();
    System.out.println(iteration);
  }
输出

10
5
请记住,当您在 Java 中迭代Stack时,您不会删除其中的任何元素。迭代本质上允许您按顺序查看堆栈中的每个元素。执行此操作时,您可以查找某些元素所在的位置,然后遍历并操作它们。如果需要,您可以计算、删除甚至更改它们。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION