Java提高篇(三一)-----Stack
在Java中Stack类表示后进先出(LIFO)的对象堆栈。栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的。每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下:

Stack通过五个操作对Vector进行扩展,允许将向量视为堆栈。这个五个操作如下:
| 操作 | 说明 |
|
|
测试堆栈是否为空。 |
|
|
查看堆栈顶部的对象,但不从堆栈中移除它。 |
|
|
移除堆栈顶部的对象,并作为此函数的值返回该对象。 |
|
|
把项压入堆栈顶部。 |
|
|
返回对象在堆栈中的位置,以 1 为基数。 |
Stack继承Vector,他对Vector进行了简单的扩展:
public class Stack<E> extends Vector<E>
Stack的实现非常简单,仅有一个构造方法,五个实现方法(从Vector继承而来的方法不算与其中),同时其实现的源码非常简单
/**
* 构造函数
*/
public Stack() {
}</span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)">
* push函数:将元素存入栈顶
</span><span style="color: rgb(0,128,0)">*/</span>
<span style="color: rgb(0,0,255)">public</span><span style="color: rgb(0,0,0)"> E push(E item) {
</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 将元素存入栈顶。
</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> addElement()的实现在Vector.java中</span>
addElement(item);
</span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> item;
} </span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)">
* pop函数:返回栈顶元素,并将其从栈中删除
</span><span style="color: rgb(0,128,0)">*/</span>
<span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">synchronized</span><span style="color: rgb(0,0,0)"> E pop() {
E obj;
</span><span style="color: rgb(0,0,255)">int</span> len =<span style="color: rgb(0,0,0)"> size(); obj </span>=<span style="color: rgb(0,0,0)"> peek();
</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 删除栈顶元素,removeElementAt()的实现在Vector.java中</span>
removeElementAt(len - 1<span style="color: rgb(0,0,0)">); </span><span style="color: rgb(0,0,255)">return</span><span style="color: rgb(0,0,0)"> obj;
} </span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)">
* peek函数:返回栈顶元素,不执行删除操作
</span><span style="color: rgb(0,128,0)">*/</span>
<span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">synchronized</span><span style="color: rgb(0,0,0)"> E peek() {
</span><span style="color: rgb(0,0,255)">int</span> len =<span style="color: rgb(0,0,0)"> size(); </span><span style="color: rgb(0,0,255)">if</span> (len == 0<span style="color: rgb(0,0,0)">)
</span><span style="color: rgb(0,0,255)">throw</span> <span style="color: rgb(0,0,255)">new</span><span style="color: rgb(0,0,0)"> EmptyStackException();
</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 返回栈顶元素,elementAt()具体实现在Vector.java中</span>
<span style="color: rgb(0,0,255)">return</span> elementAt(len - 1<span style="color: rgb(0,0,0)">);
} </span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)">
* 栈是否为空
</span><span style="color: rgb(0,128,0)">*/</span>
<span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">boolean</span><span style="color: rgb(0,0,0)"> empty() {
</span><span style="color: rgb(0,0,255)">return</span> size() == 0<span style="color: rgb(0,0,0)">;
} </span><span style="color: rgb(0,128,0)">/**</span><span style="color: rgb(0,128,0)">
* 查找“元素o”在栈中的位置:由栈底向栈顶方向数
</span><span style="color: rgb(0,128,0)">*/</span>
<span style="color: rgb(0,0,255)">public</span> <span style="color: rgb(0,0,255)">synchronized</span> <span style="color: rgb(0,0,255)">int</span><span style="color: rgb(0,0,0)"> search(Object o) {
</span><span style="color: rgb(0,128,0)">//</span><span style="color: rgb(0,128,0)"> 获取元素索引,elementAt()具体实现在Vector.java中</span>
<span style="color: rgb(0,0,255)">int</span> i =<span style="color: rgb(0,0,0)"> lastIndexOf(o); </span><span style="color: rgb(0,0,255)">if</span> (i >= 0<span style="color: rgb(0,0,0)">) {
</span><span style="color: rgb(0,0,255)">return</span> size() -<span style="color: rgb(0,0,0)"> i;
}
</span><span style="color: rgb(0,0,255)">return</span> -1<span style="color: rgb(0,0,0)">;
}</span></pre>
Stack的源码很多都是基于Vector,所以这里不再累述,更多详情请参考:Java提高篇(二九)-----Vector
Java提高篇(三一)-----Stack的更多相关文章
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识 ...
- Java提高篇(三二)-----List总结
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点能够对List接口有了比較深的了解了.仅仅有通过归纳总结的知 ...
- Java提高篇——对象克隆(复制)
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- Java提高篇(三三)-----Map总结
在前面LZ详细介绍了HashMap.HashTable.TreeMap的实现方法,从数据结构.实现原理.源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结. ...
- java提高篇(三十)-----Iterator
迭代对于我们搞Java的来说绝对不陌生.我们常常使用JDK提供的迭代接口进行Java集合的迭代. Iterator iterator = list.iterator(); while(iterator ...
- java提高篇(二九)-----Vector
在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现 ...
- Java提高篇(二八)------TreeSet
与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的.在<Java提高篇(二七)-----TreeMap>中LZ详细讲解了TreeMap实现机制,如果 ...
- Java提高篇(二七)-----TreeMap
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...
- Java提高篇(二六)-----hashCode
在前面三篇博文中LZ讲解了(HashMap.HashSet.HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是最重要也是最 ...
随机推荐
- VS2012智能提示消失的解决方法
1.点击电脑左下角的“开始菜单”->"所有程序"->Microsoft Visual Studio 2012->Visual Studio Tools->V ...
- aa12
option = { backgroundColor: '#1b1b1b', color: ['gold','aqua','lime'], title : { text: '模拟迁徙', subtex ...
- .Net中的加密解密
返回博客列表 转 .Net中的加密解密 李朝强 发布时间: 2015/11/23 12:55 阅读: 33 收藏: 3 点赞: 0 评论: 0 在一些比较重要的应用场景中,通过网络传递数据需要进行加密 ...
- spring 事务:注解方式
(1) .<context:component-scan base-package="*.*" /> 该配置隐式注册了多个对注解进行解析的处理器,如: Autowire ...
- Backbone.js
Backbone.js是一套JavaScript框架與RESTful JSON的應用程式介面.也是一套大致上符合MVC架構的編程範型.Backbone.js以輕量為特色,只需依賴一套Javascrip ...
- 百度地图开发 Android版应用Key申请
一 申请API key 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/apiconsole/key,自己自行注册一个百度账号, ...
- dp px 转换工具
public class DensityUtil { private final static String TAG = "DensityUtil"; private static ...
- unity 实现物体破碎效果的一些方法
游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...
- innodb的存储结构
如下所示,innodb的存储结构包含:表空间,段,区,页(块),行 innodb存储结构优化的标准是:一个页里面存放的行数越多,其性能越高 表空间:零散页+段 独立表空间存放的是:数据.索引.插入缓冲 ...
- 使用dom4j创建和解析xml文件
使用dom4j创建和解析xml文件 在项目开发中,我们经常会遇到xml文件的创建和解析从别人接口得到的xml文件,而我们最常使用的组件是dom4j. 下面我就以代码来讲解一下如何使用dom4j来创建x ...