Java堆栈
Java Stack是旧的Collection类。
它通过五种操作扩展了Vector类,以支持LIFO(后进先出)。
从Java 1.0开始,它在Collection API中可用。
当Vector实现List时,Stack类也是List实现类,但不支持Vector或者List的所有操作。
由于Stack支持LIFO,因此也称为LIFO列表。
Java堆栈
Java Stack是LIFO对象。
它扩展了Vector类,但仅支持五个操作。
Java Stack类只有一个为空的构造函数或者默认构造函数。
因此,当我们创建堆栈时,最初它不包含任何表示堆栈为空的项目。
堆栈内部有一个指针:TOP,它指向堆栈元素的顶部。
如果Stack为空,则TOP引用第一个元素之前的位置。
如果Stack不为空,则TOP引用顶部元素。
Java堆栈类图
Java Stack直接扩展Vector类,并间接实现RandomAccess,List,Collection等接口。
这是一个后进先出列表。
Java Stack方法
Java Stack仅通过以下五个操作扩展Vector类。
boolean empty():测试此堆栈是否为空。
E peek():在不将其从堆栈中移除的情况下,查看该堆栈顶部的对象。
E pop():删除此堆栈顶部的对象,并将该对象作为此函数的值返回。
E push(E item):将一个项目推到此堆栈的顶部。
int search(Object o):返回对象在此堆栈上的从1开始的位置。
在接下来的部分中,我们将通过一些有用的示例来深入讨论这些操作。
Java堆栈示例
现在是时候开发基本的Java Stack示例来探索其操作了。
import java.util.Stack;
public class StackBasicExample {
public static void main(String a[]){
Stack<Integer> 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()和pop()是最常用的Stack操作。
push()操作用于将元素插入顶部的Stack中。
pop()操作用于从堆栈中删除顶部元素。
堆栈数据结构具有一个内部属性:top引用该堆栈的top元素。
如果Stack为空,则此顶部指的是第一个元素之前的元素,如下所示:
如下图所示,堆栈的推入操作始终在堆栈顶部插入新元素。
如下图所示,堆栈的弹出操作始终从堆栈顶部删除元素。
如果没有元素,Stack的isEmpty()操作将返回True,否则返回False。
Java数组堆叠示例
让我们在这里探讨"如何使用给定的Int数组创建Stack对象"。
import java.util.Stack;
public class ArrayToStackExample {
public static void main(String a[]){
Integer[] intArr = { 1001,1002,1003,1004};
Stack<Integer> stack = new Stack<>();
for(Integer i : intArr){
stack.push(i);
}
System.out.println("Non-Empty stack : " + stack);
}
}
输出:
Non-Empty stack : [1001, 1002, 1003, 1004]
Java List to Stack示例
让我们在这里探讨"如何使用给定的整数列表创建Stack对象"。
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class ListToStackExample {
public static void main(String a[]){
Stack<Integer> stack = new Stack<>();
List<Integer> 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 : true Non-Empty stack : [1, 2, 3]
Java堆栈列出示例
让我们在这里探讨"如何使用整数堆栈创建List对象"。
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class StackBasicExample {
public static void main(String a[]){
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
List<Integer> 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]

