Java Collection Stack
2016-12-13 13:01
190 查看
栈只允许访问一个数据项:即最后插入的数据项。移除这个数据项后才能访问倒数第二个插入的数据项,依此类推。而Stack这个类就是实现这种数据结构的类,也就是说Stack这个类代表着last-in-first-out(LIFO).Stack继承自Vector并且添加了5个方法,然后就可以把它对待成一个栈结构。
push() 添加一个元素入栈.
pop() 删除在栈顶的元素,并且返回这个元素
peek() 查看在栈顶的元素,但是并不会把这个元素从栈中移除
empty() 测试这个栈是否是一个空的
search(Object) 返回这个元素的在栈中由上而下所在的位置
实现栈可以用数组,也可以用链表。而JDK中实现栈是通过数组实现的,它是继承自Vector,我们可以把Vector对待为线程安全的ArrayList.在之前的Blog中已经介绍了ArrayList的数据结构 – Java Collection ArrayList.
下面我们来看一看这5个方法的具体实现:
调用Vector的addElement()方法把元素到栈中。
返回数组中的最后一个元素,也就是栈顶元素。
删除栈顶元素,并返回。
通过判断数组长度为0来判断栈是否为空。
判断元素在数组出现的最后一次(有可能元素重复)的位置,然后size - 1,得到元素在栈的位置。
但是栈的运用还不止这些,还有很多,其中几个典型的运行如下:判断平衡符号,实现表达式的求值(也就是中缀表达式转后缀表达式的问题以及后缀表达式求值问题),在路劲探索中实现路劲的保存也可以说是栈的经典运用之一。具体的问题具体分析,只要满足先入后出特性的问题都能找到现成的数据结构—栈。
符号的平衡问题
表达式的求值问题
后缀表达式求值问题
具体的应用可以参看: 栈的经典运用
push() 添加一个元素入栈.
pop() 删除在栈顶的元素,并且返回这个元素
peek() 查看在栈顶的元素,但是并不会把这个元素从栈中移除
empty() 测试这个栈是否是一个空的
search(Object) 返回这个元素的在栈中由上而下所在的位置
实现栈可以用数组,也可以用链表。而JDK中实现栈是通过数组实现的,它是继承自Vector,我们可以把Vector对待为线程安全的ArrayList.在之前的Blog中已经介绍了ArrayList的数据结构 – Java Collection ArrayList.
下面我们来看一看这5个方法的具体实现:
1、push
public E push(E item) { addElement(item); return item; }
调用Vector的addElement()方法把元素到栈中。
2、peek
public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1); }
返回数组中的最后一个元素,也就是栈顶元素。
3、pop
public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; }
删除栈顶元素,并返回。
4、empty
public boolean empty() { return size() == 0; }
通过判断数组长度为0来判断栈是否为空。
5、search
public synchronized int search(Object o) { int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1; }
判断元素在数组出现的最后一次(有可能元素重复)的位置,然后size - 1,得到元素在栈的位置。
6、栈的应用
栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,但是栈满足一定的特性,那就是只有一个口,具有先入后出的特性,这种特性在计算机中有很广泛的运用。其实在程序员无时无刻不在运用栈,函数的调用是我们间接使用栈的最好例子,因此可以说栈的一个最重要的运用就是函数的调用。但是栈的运用还不止这些,还有很多,其中几个典型的运行如下:判断平衡符号,实现表达式的求值(也就是中缀表达式转后缀表达式的问题以及后缀表达式求值问题),在路劲探索中实现路劲的保存也可以说是栈的经典运用之一。具体的问题具体分析,只要满足先入后出特性的问题都能找到现成的数据结构—栈。
符号的平衡问题
表达式的求值问题
后缀表达式求值问题
具体的应用可以参看: 栈的经典运用
相关文章推荐
- 【java】【java Collection】Stack
- java中List、Map、Set、Collection、Stack、Queue等的使用
- Java中对于Collection类中Stack使用的一点需要记住的地方
- 新手,正在学Java Collection,瞎写点东西-一个基于链表的stack及其遍历
- java里的堆(heap)栈(stack)信息
- 用java.util.*中的LinkedList实现stack
- java中堆栈(stack)和堆(heap)
- java collection
- java Collection
- Collection框架设计的失误:Stack!
- Java版本和C++版本的简单Stack程序
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- Java ToyProgam LunacyDoctor implements IO and Sequence Stack
- Java中的Collection类
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 数据结构习作之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java) (技术含量少许)
- java中关于collection和map及其子类(zz)
- Collection、HashMap等java记录集的使用总结