Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java 堆栈的声明_Java 堆栈[通俗易懂]

java 堆栈的声明_Java 堆栈[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-08 07:29:51
发布于 2022-09-08 07:29:51
1.7K0
举报

大家好,又见面了,我是你们的朋友全栈君。

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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/156339.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Stack学习-Java快速进阶教程
栈是按后进先出 (LIFO) 顺序存储的元素的集合。换句话说,栈是一种以后进先出的方式存储数据的数据结构。
jack.yang
2025/04/05
400
Stack学习-Java快速进阶教程
Java集合框架-Collection01-堆栈
目录 一:堆栈  二:接口 1.Collection接口 ​编辑  集合中只能添加引用类型数据 2. List接口  3. 泛型  4. 装箱、拆箱   5. ArrayList、LinkedList、Vector区别 总结:  ---- 一:堆栈 1、堆栈结构有先进后出的特点,就像弹夹一样,先进去的在后进去的低下。 2.在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。 使用的方法是:调用addFirst(E e) 方法和getFirst() 方法 注意不要调用add方法,否
天蝎座的程序媛
2022/11/18
2990
Java集合框架-Collection01-堆栈
Java集合篇之逐渐被遗忘的Stack,手写一个栈你会吗?
其实在List的继承关系中,除了ArrayList和LinkedList之外,还有另外一个集合类stack(栈),它继承自vector,线程安全,先进后出,随着Java并发编程的发展,它在很多应用场景下被逐渐替代,成为了Java的遗落之类。不过,stack在数据结构中仍有一席之地,因此,我们有必要也应该好好的学一下!
JavaBuild
2024/05/27
1390
Java集合篇之逐渐被遗忘的Stack,手写一个栈你会吗?
Java8编程思想精粹(十)-容器持有对象(下)
堆栈是“后进先出”(LIFO)集合。它有时被称为叠加栈(pushdown stack),因为最后“压入”(push)栈的元素,第一个被“弹出”(pop)栈。经常用来类比栈的事物是带有弹簧支架的自助餐厅托盘。最后装入的托盘总是最先拿出来使用的。
JavaEdge
2020/05/26
7910
Java8编程思想(十二)-容器持有对象(下)
堆栈是“后进先出”(LIFO)集合。它有时被称为叠加栈(pushdown stack),因为最后“压入”(push)栈的元素,第一个被“弹出”(pop)栈。经常用来类比栈的事物是带有弹簧支架的自助餐厅托盘。最后装入的托盘总是最先拿出来使用的。
JavaEdge
2020/05/26
5740
【背诵⑤】保姆级 | 零基础备赛蓝桥杯Java组| 栈的使用
你可以通过这些方法来操作栈,实现数据的压入、弹出、查看栈顶元素以及判断栈是否为空。
命运之光
2024/04/15
1040
Java 容器 & 泛型(2):ArrayList 、LinkedList和Vector比较
序列(List),有序的Collection,正如它的名字一样,是一个有序的元素列表。确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。实现List的有:ArrayList、LinkedList、Vector、Stack等。值得一提的是,Vector在JDK1.1的时候就有了,而List在JDK1.2的时候出现,待会我们会聊到ArrayList和Vector的区别。
哲洛不闹
2018/09/19
4640
Java 容器 & 泛型(2):ArrayList 、LinkedList和Vector比较
盘点Java基础中的Stack类及其常用方法
1.Stack是Vector的一个子类,它实现标准的后进先出堆栈。Stack只定义了创建空堆栈的默认构造方法。
Java进阶者
2021/07/23
1.9K0
2.Java集合总结系列:List接口及其实现
在介绍List接口之前,我们先来看看 Collection 接口,因为Collection接口是 List / Set / Queue 接口的父接口,List / Set / Queue 的实现类中很
陈树义
2018/04/13
9580
2.Java集合总结系列:List接口及其实现
Collection实现类解析ArrayList,LinkedList,Vector
kl博主
2023/11/18
1560
Collection实现类解析ArrayList,LinkedList,Vector
Java集合-Stack
Stack(java.util.Stack)类是典型的栈数据结构,可以从头部插入,读取和移除元素。Stack是List接口的一个实现,但是很少使用Stack作为List- 除非需要检查当前存储在Stack中的所有元素。
后端码匠
2021/03/16
5220
C++和Java中STL库入门[通俗易懂]
STL简称标准模版库,被容纳在C++标准程序库,包含了许多基本数据结构和基本算法,使程序员写起来得心应手。
全栈程序员站长
2022/09/27
1.3K0
List集合
  Collection接口没有提供直接的实现类,而是提供了更加具体的子接口的实现类,其中一个最常用的子接口就是List接口。List集合中的元素是有序、可重复的。
别团等shy哥发育
2023/02/25
6740
List集合
Java栈Stack的使用
简介:栈是在现实工程项目中和算法比赛中最常用的数据结构之一,Java内置Stack数据结构,本文旨在用最简洁和快速的方式教会大家使用Stack。
GeekLiHua
2025/01/21
830
Java栈Stack的使用
大公司最喜欢问的Java集合类面试题
看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧。
Java团长
2018/08/07
4640
集合框架【第一章】——List-使用LinkedList完成一个堆栈MyStack(为例)
1. Collection接口   1.1 集合框架的顶级接口   1.2 是Set和List的父接口   1.3 但不是Map的父接口 (如图所示)
用户10196776
2022/11/22
2350
集合框架【第一章】——List-使用LinkedList完成一个堆栈MyStack(为例)
JAVA集合类(大公司面试喜欢问的)
看了一些所谓大公司的Java面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧。
哲洛不闹
2018/09/14
4910
栈的Java简单实现
  进行插入和删除操作的一端称为“栈顶”(top),另一端称为“栈底”(bottom)。
Rekent
2018/09/04
1.1K0
设计一个有getMin功能的栈
【题目】   实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中的最小元素的操作。 【要求】   1.pop、push、getMin操作的时间复杂度都是O(1)。   2.设计的栈类型可以使用现成的栈结构。 方案一的代码实现如下: 1 import java.util.Stack; 2 public class MyStack1 { 3 private Stack<Integer> stackData; 4 private Stack<Integer> stackMin;
Angel_Kitty
2018/04/10
4880
Java中的Push方法:实现与应用探讨
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2024/09/23
2010
Java中的Push方法:实现与应用探讨
相关推荐
Stack学习-Java快速进阶教程
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档