Java Stack 是一个传统的 Collection 类。它扩展 Vector 类但只支持五个操作,以支持 LOFO(后进先出)。自 Java 1.0 以来,它在 Collection API 中可用。
由于 Vector 实现 List,Stack 类也是一个 List 实现类,但是并不支持 Vector 或 List 中的所有操作。由于 Stack 支持 LIFO ,它也被称为 LIFO 列表。
在本文中我们将讨论 Java Stack 的以下概念:
Java Stack 是 LIFO 类。它扩展 Vetor 类,但是只支持五个操作。Java Stack 类只有一个空的或默认的构造器。所以,当我们创建一个 Stack 时,最初它不包含任何物件,意为着栈为空。
Stack 内部有一个指针:TOP,它指向栈元素的顶部。如果 Stack 为空,则 TOP 第一个元素之前的位置。如果 Stack 不为空,TOP 指向头元素。
Java Stack 直接扩展了 Vector 类并且间接地实现了 RadomAccess、List、Collection 等接口。它是 LIFO 列表。
Java Stack 仅通过以下五个操作扩展 Vector 类。
boolean empty()
:测试这个 Stack 是否为空。E peek()
:查看 Stack 顶部的对象,而不将其从 Stack 中移除。E pop()
:移除 Stack 顶部的对象,并返回该对象最为此函数的返回值。E push(E item)
:将 item 插入到 Stack 顶部。int search(Object o)
:Returns the 1-based position where an object is on this stack.是时候来开发基础 Java Stack 栗子来探索它的操作了。
package Stack;
import java.util.Stack;
public class StackBasicExample {
public static void main(String a[]) {
Stack stack = new Stack<>();
System.out.println("Empty stack : " + stack);
System.out.println("Empty stack : " + stack.isEmpty());
// Exception in thread "main" java.util.EmptyStackException
// System.out.println("Empty stack : Pop Operation : " + stack.pop());
stack.push(1001);
stack.push(1002);
stack.push(1003);
stack.push(1004);
System.out.println("Non-Empty stack : " + stack);
System.out.println("Non-Empty stack : Pop Operation : " + stack.pop());
System.out.println("Non-Empty stack : After Pop Operation : " + stack);
System.out.println("Non-Empty stack : search() Operation : " + stack.search(1002));
System.out.println("Non-Empty stack : " + stack.isEmpty());
}
}
Empty stack : []
Empty stack : true
Non-Empty stack : [1001, 1002, 1003, 1004]
Non-Empty stack : Pop Operation : 1004
Non-Empty stack : After Pop Operation : [1001, 1002, 1003]
Non-Empty stack : search() Operation : 2
Non-Empty stack : false
如我们所知,Stack 的 push() 和 pop() 是最常用的 Stack 操作。push() 操作是将元素插入 Stack 的顶部。pop() 操作被认为用来从 Stack 中移除顶部元素。
Stack 数据结构有一个内部属性:TOP 指向该 Stack 的顶层元素。如果 Stack 为空,则此顶部此顶部指的是第一个元素之前,如下所示:
如下图所示,Stack 的 Push 操作总是在 Stack 顶部插入新元素。
如下图所示,Stack 的 Pop 操作总是在 Stack 顶部移除元素。
当 Stack 没有元素,Stack 的 isEmpty() 操作将返回 false,并且在任何情况下它都返回 true。
让我们来探索“如何使用已给的 Int Array 来创建一个 Stack 对象”。
package Stack;
import java.util.Stack;
public class ArrayToStackExample {
public static void main(String[] args) {
Integer[] intArr = {1001, 1002, 1003, 1004};
Stack stack = new Stack<>();
for (Integer i : intArr) {
stack.push(i);
}
System.out.println("Non-Empty stack : " + stack);
}
}
输出:
Non-Empty stack : [1001, 1002, 1003, 1004]
让我们探讨一下“如何用给定的 List of Integers 创建堆栈对象”。
package Stack;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class ListToStackExample {
public static void main(String[] args) {
Stack stack = new Stack<>();
List list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println("Non-Empty stack addAll Operation : " + stack.addAll(list));
System.out.println("Non-Empty stack : " + stack);
}
}
输出:
Non-Empty stack addAll Operation : true
Non-Empty stack : [1, 2, 3]
package Stack;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class StackToListExample {
public static void main(String[] args) {
Stack stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
List list = new ArrayList<>();
list.addAll(stack);
System.out.println("Non-Empty stack : " + stack);
System.out.println("Non-Empty List : " + list);
}
}
输出
Non-Empty stack : [1, 2, 3]
Non-Empty List : [1, 2, 3]