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应该是最重要也是最 ...
随机推荐
- [python] os.path说明
os.path - Common pathname manipulations操作 This module implements some useful functions on pathnames. ...
- CentOS下搭建SVN
1.安装svn yum -y install subversion 2.创建hydata目录 mkdir -p /var/svn/hydata 3.创建 m 目录 mkdir -p /var/svn/ ...
- .net中从GridView中导出数据到excel(详细)
1,创建数据源 找到要导出的GridView中的数据. 2,重写VerifyRenderingInServerForm方法. public override void VerifyRenderingI ...
- shell学习--grep2
grep相关的练习,解释下面grep表达式的含义: grep '\<Tom\>' file 打印file中包含单词 Tom的行 grep 'Tome Savage' file 打印file ...
- netload 加载程序集抛异常----无法加载程序集解决办法
netload 加载程序集抛异常----无法加载程序集 错误信息如下: 无法加载程序集.错误详细信息: System.BadImageFormatException: 未能加载文件或程序集“file: ...
- [转]SQL Server字符串处理函数大全
select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不 ...
- PBX 评测二
//由于诸事繁多,结果评测一拖再拖. 博客园的优化还行啊,PBX220搜索, 第一页,第四个就是上一篇的评测文章. 配置没有什么说的(按照说明/还有这篇无线迷你IPPBX-PBX220). 以下是在公 ...
- PHPstudy 无法启动Apache
今天打安装完phpstudy的时候,启动Apache发现端口被占用,这个端口也就是system端口.如果想要启动服务器必须关掉这个,但是会导致系统无法正常显示. 后来我就在网上搜各种办法,依然没成功. ...
- 1014 : Trie树 hihocoder
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. ...
- Oracle 服务手动启动关闭
在windows7中安装完Oracle11g之后会出现一下七种服务:可通过运行->services.msc查看. 其中各个服务名称中的ORCL或orcl为SID即System IDentifie ...