java 堆栈的声明_Java 堆栈
Java 堆栈
堆栈是一种线性数据结构,用于存储对象的集合。它基于先进先出(LIFO)。 Java集合框架提供了许多接口和类来存储对象的集合。其中之一是Stack类,它提供了不同的操作,例如推,弹出,搜索等。
在本节中,我们将讨论Java Stack类,其方法和实现在 Java中的堆栈数据结构程序。但是在转到Java Stack类之前,请先快速了解堆栈的工作原理。
堆栈数据结构具有两个最重要的操作,分别是push和pop。推操作将元素插入堆栈,弹出操作将元素从堆栈顶部移除。让我们看看它们如何在堆栈上工作。
让我们推20,13,89,90,
让我们删除(弹出)18, 45和11。
空堆栈:如果堆栈中没有元素,则称为空堆栈。当堆栈为空时,顶部变量的值为-1。
当我们按下堆栈中的元素顶部增加了1。在下图中,
推12,前= 0
按6,top = 1
推9,top = 2
当我们从堆栈中弹出一个元素时,top的值被减小了1。在下图中,我们弹出了9。
下表显示了不同的值
Java Stack类
在Java中,Stack是属于Collection框架的类,该类扩展了Vector类。它还实现了列表,集合,可迭代,可克隆,可序列化的接口。它表示对象的LIFO堆栈。在使用Stack类之前,我们必须导入java.util包。堆栈类按Collections框架层次结构排列,如下所示。
Stack类构造器
Stack类仅包含创建空堆栈的默认构造器。
publicStack()
创建堆栈
如果要创建堆栈,请首先导入java.util包并创建一个Stack类的对象。
Stack stk =newStack();
或
Stack stk =newStack<>();
其中的类型表示堆栈的类型,例如整数,字符串等。
堆栈类的方法
我们可以执行push,pop,peek并在堆栈上进行搜索操作。 Java Stack类主要提供五种方法来执行这些操作。除此之外,它还提供了 Java Vector类的所有方法。
方法
修饰符和类型
方法说明
empty()
boolean
该方法检查堆栈是否为空。
push(E item)
E
该方法将一个元素压入(插入)堆栈的顶部。
pop()
E
该方法从堆栈顶部删除一个元素,并返回与该函数的值相同的元素。
peek()
E
该方法在不删除堆栈的情况下查看堆栈的顶部元素。
search(Object o)
int
该方法搜索指定的对象并返回该对象的位置。
堆栈类empty()方法
Stack类的empty()方法检查堆栈是否为空与否。如果堆栈为空,则返回true,否则返回false。我们还可以使用Vector类的 isEmpty()方法。
语法
publicbooleanempty()
返回:: 如果堆栈为空,则该方法返回true,否则返回false。
在以下示例中,我们创建了Stack类的实例。之后,我们两次调用了empty()方法。第一次返回true,因为我们没有将任何元素压入堆栈。之后,我们将元素推入堆栈。再次,我们调用了empty()方法,该方法返回false,因为堆栈不为空。
StackEmptyMethodExample.java
import java.util.Stack;
publicclassStackEmptyMethodExample
{
publicstaticvoidmain(String[] args)
{
Stackstk=newStack<>();
boolean result = stk.empty();
System.out.println("Is the stack empty? " + result);
stk.push(78);
stk.push(113);
stk.push(90);
stk.push(120);
System.out.println("Elements in Stack: " + stk);
result = stk.empty();
System.out.println("Is the stack empty? " + result);
}
}
输出:
Is the stack empty?true
Elements in Stack: [78, 113, 90, 120]
Is the stack empty?false
堆栈类push()方法
该方法将一项插入到堆栈顶部。它的作用与Vector类的 addElement(item)方法相同。它传递参数item并将其压入堆栈。
语法
publicE push(E item)
参数:要推入堆栈顶部的项目。
返回值:该方法返回已传递的参数
堆栈类pop()方法
该方法删除堆栈顶部的一个对象并返回相同的对象。如果堆栈为空,则会抛出EmptyStackException。
语法
publicE pop()
返回:: 它返回位于堆栈顶部的对象。
让我们在Java程序中实现堆栈并执行推入和弹出操作。
StackPushPopExample.java
import java.util.*;
publicclassStackPushPopExample
{
publicstaticvoidmain(String args[])
{
Stack stk =newStack<>();
System.out.println("stack: " + stk);
pushelmnt(stk, 20);
pushelmnt(stk, 13);
pushelmnt(stk, 89);
pushelmnt(stk, 90);
pushelmnt(stk, 11);
pushelmnt(stk, 45);
pushelmnt(stk, 18);
popelmnt(stk);
popelmnt(stk);
try
{
popelmnt(stk);
}
catch(EmptyStackException e)
{
System.out.println("empty stack");
}
}
staticvoidpushelmnt(Stack stk, intx)
{
stk.push(new Integer(x));
System.out.println("push -> " + x);
System.out.println("stack: " + stk);
}
staticvoidpopelmnt(Stack stk)
{
System.out.print("pop -> ");
Integer x = (Integer) stk.pop();
System.out.println(x);
System.out.println("stack: " + stk);
}
}
输出:
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]
堆栈类peek()方法
它查看堆栈顶部的元素。如果堆栈为空,它还会引发EmptyStackException。
语法
publicE peek()
返回:它返回堆栈的顶部元素。
让我们看一下peek()方法的示例。
StackPeekMethodExample.java
import java.util.Stack;
publicclassStackPeekMethodExample
{
publicstaticvoidmain(String[] args)
{
Stack stk=newStack<>();
stk.push("Apple");
stk.push("Grapes");
stk.push("Mango");
stk.push("Orange");
System.out.println("Stack: " + stk);
String fruits = stk.peek();
System.out.println("Element at top: " + fruits);
}
}
输出:
Stack: [Apple, Grapes, Mango, Orange]
Element at the top of the stack: Orange
堆栈类search()方法
该方法从顶部开始搜索堆栈中的对象。它解析我们要搜索的参数。它返回对象在堆栈中从1开始的位置。堆栈最顶部的对象被视为距离1。
假设,o是我们要搜索的堆栈中的对象。该方法返回距堆栈顶部最近的堆栈顶部的距离。它使用equals()方法搜索堆栈中的对象。
语法
publicintsearch(Object o)
参数: o是要搜索的所需对象。
返回:它从堆栈顶部返回对象位置。如果返回-1,则表示该对象不在堆栈上。
让我们看一下search()方法的示例。
StackSearchMethodExample.java
import java.util.Stack;
publicclassStackSearchMethodExample
{
publicstaticvoidmain(String[] args)
{
Stack stk=newStack<>();
stk.push("Mac Book");
stk.push("HP");
stk.push("DELL");
stk.push("Asus");
System.out.println("Stack: " + stk);
intlocation = stk.search("HP");
System.out.println("Location of Dell: " + location);
}
}
Java堆栈操作
堆栈大小
我们还可以使用 size()方法。它返回堆栈中元素的总数(堆栈的大小)。
语法
publicintsize()
让我们看一下Vector类的size()方法的示例。
StackSizeExample.java
import java.util.Stack;
publicclassStackSizeExample
{
publicstaticvoidmain (String[] args)
{
Stack stk =newStack();
stk.push(22);
stk.push(33);
stk.push(44);
stk.push(55);
stk.push(66);
boolean rslt=stk.empty();
System.out.println("Is the stack empty or not? " +rslt);
intx=stk.size();
System.out.println("The stack size is: "+x);
}
}
输出:
Is the stack empty or not?false
The stack size is: 5
迭代元素
迭代意味着获取堆栈中的元素。我们可以使用以下三种不同的方法来获取堆栈的元素:
使用iterator()方法
使用forEach()方法
使用listIterator()方法
使用iterator()方法
这是Iterator接口的方法。它在堆栈中的元素上返回一个迭代器。在使用iterator()方法之前,请导入java.util.Iterator包。
语法
Iterator<
T>
iterator()
让我们在堆栈上执行迭代。
StackIterationExample1.java
import java.util.Iterator;
import java.util.Stack;
publicclassStackIterationExample1
{
publicstaticvoidmain (String[] args)
{
Stack stk =newStack();
stk.push("BMW");
stk.push("Audi");
stk.push("Ferrari");
stk.push("Bugatti");
stk.push("Jaguar");
Iterator iterator = stk.iterator();
while(iterator.hasNext()){
Object values = iterator.next();
System.out.println(values);
}
}
}
输出:
BMW
Audi
Ferrari
Bugatti
Jaguar
使用forEach()方法
Java提供了一个forEach()方法来迭代元素。该方法在Iterable和Stream接口中定义。
语法
defaultvoidforEach(Consumeraction)
让我们使用forEach()方法遍历堆栈。
StackIterationExample2.java
import java.util.*;
publicclassStackIterationExample2
{
publicstaticvoidmain (String[] args)
{
Stack stk =newStack<>();
stk.push(119);
stk.push(203);
stk.push(988);
System.out.println("Iteration over the stack using forEach() Method:");
stk.forEach(n ->
{
System.out.println(n);
}
);
}
}
输出:
Iteration over the stack using forEach() Method:
119
203
988
使用listIterator()方法
此方法从列表中的指定位置开始(按顺序)返回所提到列表中元素的列表迭代器。从t迭代堆栈
语法
ListIterator listIterator(intindex)
参数:该方法解析名为index的参数。
返回:此方法返回列表迭代器。
异常:: 如果索引超出范围,它将抛出IndexOutOfBoundsException。
让我们迭代
StackIterationExample3.java
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Stack;
publicclassStackIterationExample3{
publicstaticvoidmain (String[] args){
Stack stk =newStack<>();
stk.push(119);
stk.push(203);
stk.push(988);
ListIterator ListIterator = stk.listIterator(stk.size());
System.out.println("Iteration over the Stack from top to bottom:");
while(ListIterator.hasPrevious()){
Integer avg = ListIterator.previous();
System.out.println(avg);
}
}
}
输出:
Iteration over the Stack from top to bottom:
988
203
119
java 堆栈的声明_Java 堆栈相关推荐
- java 浮点类型声明_java 浮点数据类型
Java的浮点类型有两种:float和double.Java的浮点类型有固定的表数范围和字段长度,字段长度和表数范围和机器无关.Java的浮点数遵循IEEE754标准,采用二进制数据的科学计数法来表示 ...
- java栈的应用_Java堆栈应用程序
我有一个Java问题,涉及阅读一个文本文件,并检查它是否正确地平衡了花括号,方括号和括号 - '{','}','[',']','('和') ". 读取文件没有问题,但现在我应该使用名为Del ...
- java集合对象声明_Java基础————集合类
原标题:Java基础----集合类 理解集合类 集合类存放于java.util包中. 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(refere ...
- java数组的声明_Java数组定义常用方法
Java数组定义常用方法 Java中的数组.是一种简单的线性数据存储结构.他用牺牲自动扩展大小来换取与集合相比的唯一优势--查询效率的提升.Java中的数组有什么类型?我们要怎么定义这些数组呢?下面跟 ...
- java 静态变量声明_java静态变量怎么声明?
展开全部 个人的总结 1 静态变量e69da5e6ba9062616964757a686964616f31333337616564只有一份被类的所有实例共享 2 静态变量的声明在编译时已经明确了内存的 ...
- java合法的数组声明_Java数组详解
Java数组详解 数组详解 1.数组概述 数组是相同类型数据的有序集合 每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们 2.数组声明和创建 ①数组声明形式 dataType[] a ...
- java thread.sleep 声明_java 线程Thread.Sleep详解(转载)
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果 ...
- java堆栈_Java堆栈– Java堆栈
java堆栈 Java Stack is a legacy Collection class. It extends Vector class with five operations to supp ...
- 堆栈区别java总结_java 堆栈的区分,区别
为了直观,直接通过代码演示: 堆栈划分图: 堆栈区别: 基于上边的解释我们可以很简单的总结出堆和栈的区别: 1.应用程序所有的部分都使用堆内存,然后栈内存通过一个线程运行来使用. 2.不论对象什么时候 ...
- Java如何打印异常的堆栈?
Java如何打印异常的堆栈? 参考文章: (1)Java如何打印异常的堆栈? (2)https://www.cnblogs.com/borter/p/9613546.html 备忘一下.
最新文章
- P3924 康娜的线段树(マジやばくね)(线段树、期望、前缀和)难度⭐⭐⭐★
- springboot主线程_Springboot对多线程的支持详解
- 使用vue-seamless-scroll自动滚动插件复制出来的数据点击事件无效的解决办法
- 信息学奥赛一本通 2053:【例3.3】三个数
- 结构化数据抽取成三元组_干货丨AI在数据防泄漏中的应用——知识图谱之知识抽取...
- ubuntu下针对php的thrift 安装折腾记录
- 数据挖掘:模型选择——集成算法与树模型
- Office Word2019您正试图运行的函数包含有宏或需要宏语言
- Hibernate的双向1-N关联(五)
- 计算机视觉方面的数据集收藏(CV Datasets on the web)
- Helloj2ee学Silverlight之五——Silverlight的编程模型
- 数据仓库是如何分层的?
- 规则引擎groovy
- 联想android怎么解密,联想G886手机如何解密
- 处理 /home/china/.vimrc 时发生错误: 第1行: E492: 不是编辑器的命令
- jadx 1.4.5反编译包不全
- vue导入导出excel组件封装
- 美元人民币汇率API
- 华为-交换机堆叠配置
- nginx php spawn-fcgi,搭建CentOS+NGINX+Spawn-fcgi+CPP开发环境