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]