文档章节

看看java.util.Stack源Java 9

woshixin
 woshixin
发布于 2018/08/15 21:55
字数 756
阅读 4
收藏 0

    在我们的数据结构的学习中,栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性表,插入一般称为进栈,删除则称为退栈。

    我们看看java.util.Stack的设计吧。

    我们来解读一下官方文档给的说明吧,Stack类表示对象的后进先出(LIFO)堆栈。它使用五个操作扩展了Vector类,这些操作允许将向量视为堆栈。提供了常见的推送和弹出操作,以及查看堆栈顶部项目的方法,测试堆栈是否为空的方法,以及搜索堆栈中的值并发现其从顶部的距离。

    创建堆栈时,它不包含任何值。

    Deque接口及其实现提供了更完整和一致的LIFO堆栈操作集,应优先使用此类。例如: 

    Deque<Integer> stack = new ArrayDeque<Integer>();

    可以看到Stack的构造方法就一个,里面什么也没有,就是super()先会调用Vector的默认构造方法。

    Stack有以下的几个方法

    empty()方法就是返回stack是否为空,判断的是size()==0

    peek()方法获取此堆栈顶部的对象,而不将其从堆栈中删除。

    pop()方法移除此堆栈顶部的对象,并将该对象作为此函数的值返回。其中removeelementAt是继承的Vector的方法,是加了synchronized

        push​(E item)将项目推到此堆栈的顶部。其实就是Vector的addElement方法

    search​(Object o)返回对象在此堆栈上的从1开始的位置

 

 

    然后我们看看用stack来解决汉诺塔问题娱乐以下吧!

    相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。


    下面的代码,是我copy网上大神的,如果你运行了,会发现很慢,奸笑!

有什么讨论的内容,可以加我公众号:

 

 

© 著作权归作者所有

woshixin
粉丝 32
博文 368
码字总数 278466
作品 0
杭州
程序员
私信 提问
如何使用 Python 访问 Java 类

More examples are available in the documentation. We have a mapping between Java/Python type, native arrays, support for methods with multiple signatures, and a lot more. We are......

王振威
2012/11/27
694
0
Java实现栈Stack_栈内部使用数组存储结构

Java实现栈Stack_栈内部使用数组存储结构 抽象数据类型栈的定义: 栈(stack),是限定在表尾进行插入或删除操作的线性表,因此对栈来说表尾有其特殊的含义,称为栈顶,相应的,表头端称为栈...

秋风醉了
2014/09/14
180
0
微服务 SpringBoot 2.0(七):使用JdbcTemplates访问Mysql

一切没有与数据库交互的网站都是假网站 —— Java面试必修 引言 在web开发服务中,开发人员要做的事情就是将数据库中的数据返回至前端页面,在第五章我们已经整合了页面,今天我们再结合数据...

阿郎_
2018/09/28
0
0
如何使用 Python 访问 Java 类

很高兴给大家介绍一个 Pyjnius 项目。这是一个可以使用在桌面或Android上,用来访问Java类的Python库。 源代码:github.com/kivy/pyjnius 文档:pyjnius.readthedocs.org 也有其他一些的库,...

迷途d书童
2012/08/24
3.6K
10
康旺,看过来

1.团购信息表里的原价,团购价,以及结算价有什么区别,我的理解是原价是200,团购价比如优惠10块是190,结算价呢? 2.团购订单表里的油品价是什么?非油品的东西放在订单里是做什么的? 3.油价...

似水流年_OR
2015/07/01
4
3

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
851
11
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
15
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部