Java Stack 类2025年4月6日 | 阅读10分钟 栈是一种线性数据结构,用于存储对象的集合。它基于后进先出 (LIFO) 原则。在 Java 中,栈具有特殊的重要性,构成了许多算法和应用程序的基础。Java 集合框架提供了许多接口和类来存储对象的集合。其中之一就是 Stack 类,它提供了 push、pop、search 等不同的操作。 在本节中,我们将讨论 Java Stack 类、它的方法,并在 Java 程序中实现栈数据结构。但在转向 Java Stack 类之前,让我们快速了解一下栈的工作原理。 Stack栈数据结构有两个最重要的操作:push 和 pop。push 操作将元素插入栈中,pop 操作从栈顶移除元素。想象它是一堆盘子,你只能添加或移除最上面的盘子。项目可以被添加(push)到栈中,也可以从栈中移除(pop)。最近添加的项目是第一个被移除的。让我们看看 push 和 pop 如何在栈上工作。 ![]() 让我们分别将 20、13、89、90、11、45、18 压入栈中。 ![]() 让我们从栈中移除 (pop) 18、45 和 11。 ![]() 空栈:如果栈中没有元素,则称为空栈。当栈为空时,top 变量的值为 -1。 ![]() 当我们向栈中压入一个元素时,top 会增加 1。在下图中,
![]() 当我们从栈中弹出一个元素时,top 的值会减少 1。在下图中,我们已经弹出了 9。 ![]() 下表显示了 top 的不同值。 ![]() Java Stack 类在 Java 中,Stack 是一个属于 Collection 框架的类,它扩展了 Vector 类。它还实现了 List、Collection、Iterable、Cloneable 和 Serializable 接口。它表示对象的 LIFO 栈。它使用泛型 ( ![]() Stack 类构造函数Stack 类只包含默认构造函数,它创建一个空栈。 创建栈如果我们要创建一个栈,首先,导入 java.util 包并创建 Stack 类的一个对象。 或 其中 type 表示栈的类型,如 Integer、String 等。 Stack 类的方法我们可以在栈上执行 push、pop、peek 和 search 操作。Java Stack 类主要提供了五种方法来执行这些操作。除此之外,它还提供了 Java Vector 类的所有方法。
Stack 类 empty() 方法Stack 类的 empty() 方法检查栈是否为空。如果栈为空,如果栈不包含任何元素则返回 true,否则返回 false。我们也可以使用 Vector 类的 isEmpty() 方法。 语法 返回:如果栈为空,该方法返回 true,否则返回 false。 在以下示例中,我们创建了一个 Stack 类的实例。之后,我们两次调用了 empty() 方法。第一次它返回 true,因为我们没有向栈中压入任何元素。之后,我们向栈中压入了元素。我们再次调用 empty() 方法,它返回 false,因为栈不为空。 示例编译并运行输出 Is the stack empty? true Elements in Stack: [78, 113, 90, 120] Is the stack empty? false Stack 类 push() 方法该方法将一个项目插入到栈顶。它的工作方式与 Vector 类的 addElement(item) 方法相同。它传递一个参数 item 以压入栈中。 语法 参数:要压入栈顶的项目。 返回:该方法返回我们作为参数传递的参数。 Stack 类 pop() 方法该方法移除栈顶的对象并返回相同的对象。如果栈为空,它会抛出 EmptyStackException。 语法 返回:它返回栈顶的对象。 让我们在 Java 程序中实现栈并执行 push 和 pop 操作。 示例输出 stack: [] push -> 20 stack: [20] push -> 13 stack: [20, 13] push -> 89 stack: [20, 13, 89] push -> 90 stack: [20, 13, 89, 90] push -> 11 stack: [20, 13, 89, 90, 11] push -> 45 stack: [20, 13, 89, 90, 11, 45] push -> 18 stack: [20, 13, 89, 90, 11, 45, 18] pop -> 18 stack: [20, 13, 89, 90, 11, 45] pop -> 45 stack: [20, 13, 89, 90, 11] pop -> 11 stack: [20, 13, 89, 90] Stack 类 peek() 方法peek() 方法返回栈顶元素而不移除它。它允许我们检查栈顶的元素而不修改栈的内容。它查看栈中顶部的元素。如果栈为空,它也会抛出 EmptyStackException。 语法 返回:它返回栈顶元素。 让我们看一个 peek() 方法的例子。 示例编译并运行输出 Stack: [Apple, Grapes, Mango, Orange] Element at the top of the stack: Orange Stack 类 search() 方法该方法从栈顶开始搜索对象。它解析我们想要搜索的参数。它返回对象在栈中的 1-based 位置。栈中最顶部的对象被认为是距离 1。 假设 o 是栈中我们要搜索的对象。该方法返回离栈顶最近的出现位置与栈顶的距离。它使用 equals() 方法在栈中搜索对象。 语法 参数:o 是要搜索的目标对象。 返回:它返回对象在栈中的位置。如果返回 -1,则表示该对象不在栈中。 让我们看一个 search() 方法的例子。 示例编译并运行输出 Stack: [Mac Book, HP, DELL, Asus] Location of Dell: 3 Java 栈操作栈的大小我们还可以使用 Vector 类的 size() 方法来查找栈的大小。它返回栈中元素的总数(栈的大小)。 语法 让我们看一个 Vector 类的 size() 方法的例子。 示例输出 Is the stack empty or not? false The stack size is: 5 迭代元素迭代意味着获取栈的元素。我们可以使用三种不同的方法来获取栈的元素,如下所示:
使用 iterator() 方法它是 Iterator 接口的方法。它返回一个迭代器,用于迭代栈中的元素。在使用 iterator() 方法之前,导入 java.util.Iterator 包。 语法 让我们对栈执行迭代。 示例编译并运行输出 BMW Audi Ferrari Bugatti Jaguar 使用 forEach() 方法Java 提供了一个 forEach() 方法来迭代元素。该方法在 Iterable 和 Stream 接口中定义。 语法 让我们使用 forEach() 方法迭代栈。 示例输出 Iteration over the stack using forEach() Method: 119 203 988 使用 listIterator() 方法此方法返回一个列表迭代器,用于迭代指定列表(按顺序)中的元素,从列表中指定位置开始。它从上到下迭代栈。 语法 参数:该方法解析一个名为 index 的参数。 返回:此方法返回一个列表迭代器,用于按顺序迭代元素。 异常:如果索引超出范围,它会抛出 IndexOutOfBoundsException。 让我们使用 listIterator() 方法迭代栈。 示例编译并运行输出 Iteration over the Stack from top to bottom: 988 203 119 Java 栈 MCQ1. 下列哪项最能描述 Java Stack 类中 push(E item) 方法的行为?
答案:A 解释:Java Stack 类中的 push(E item) 方法将指定元素添加到栈顶。 2. 以下代码的结果是什么?
答案:B 解释:Java Stack 类中的 pop() 方法移除并返回栈顶元素,因此 top 将被赋值为 2。 3. Java Stack 类中哪个方法返回栈顶元素而不移除它?
答案:C 解释:Java Stack 类中的 peek() 方法检索但不移除栈顶元素。 4. Java Stack 类中 push(E item) 方法的时间复杂度是多少?
答案:A 解释:Java Stack 类中的 push(E item) 方法的时间复杂度为 O(1),因为它只是将指定元素添加到栈顶。 5. 何时应该使用 Java Stack 类中的 isEmpty() 方法?
答案:C 解释:Java Stack 类中的 isEmpty() 方法用于在执行 pop() 等操作之前检查栈是否为空,以避免 EmptyStackException 等异常。 下一主题Java Collection |
我们请求您订阅我们的新闻通讯以获取最新更新。