大家好,又见面了,我是全栈君。
1.Stack的简介
Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
因为它继承自Vector,那么它的实现原理是以数组实现堆栈的。如果要以链表方式实现堆栈可以使用LinkedList!
2.Stack的继承关系
java.lang.Object
继承者 java.util.AbstractCollection<E>
继承者 java.util.AbstractList<E>
继承者 java.util.Vector<E>
继承者 java.util.Stack<E>
所有已实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
并且从类 java.util.Vector 继承的字段
capacityIncrement, elementCount, elementData
从类 java.util.AbstractList 继承的字段
modCount
3.Stack的API
Stack API
Stack只有下面四个方法!由于Stack继承了Vector ,它也有Vector的API方法!
boolean empty()
测试堆栈是否为空。
E peek()
查看堆栈顶部的对象,但不从堆栈中移除它。
E pop()
移除堆栈顶部的对象,并作为此函数的值返回该对象。
E push(E item)
把项压入堆栈顶部。
int search(Object o)
返回对象在堆栈中的位置,以 1 为基数。
4.源码
public
class Stack<E> extends Vector<E> {
/** * 创建一个空堆栈。 */
public Stack() {
}
/** * 把项压入堆栈顶部。其作用与下面的方法完全相同: * * item - 压入堆栈的项。 * * @return 返回 item 参数。 */
public E push(E item) {
addElement(item);//是Vector中的方法,详细实现请查看Vector的源码
return item;
}
/** * 移除堆栈顶部的对象,并作为此函数的值返回该对象。 * * @return 堆栈顶部的对象( Vector 对象中的最后一项)。 * @throws EmptyStackException if this stack is empty. */
public synchronized E pop() {
//注意此方法是 synchronized修饰的,同步方法
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);//是Vector中的方法,详细实现请查看Vector的源码
return obj;
}
/** * 查看堆栈顶部的对象,但不从堆栈中移除它。 * */
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
/** * Tests if this stack is empty. * * 测试堆栈是否为空。 为空返回 true */
public boolean empty() {
return size() == 0;
}
/** * 返回对象在堆栈中的位置,以 1 为基数。如果对象 o是堆栈中的一个项, * 此方法返回距堆栈顶部最近的出现位置到堆栈顶部的距离; * 堆栈中最顶部项的距离为 1。使用 equals 方法比较 o 与堆栈中的项。 * * @param o the desired object. o - 目标对象。 * @return the 1-based position from the top of the stack where * the object is located; the return value <code>-1</code> * indicates that the object is not on the stack. * 返回 : 对象到堆栈顶部的位置,以 1 为基数;返回值 -1 表示此对象不在堆栈中。 */
public synchronized int search(Object o) {
//注意此方法为 synchronized
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = 1224463164541339165L;
}
5.总结
(1) Stack实际上也是通过数组去实现的。实际调用的实现方法都是Vector中的方法!
– push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。
-
peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。
-
pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。
(2) Stack继承于Vector,Stack拥有着Vector的属性和功能!
java集合系列——java集合概述(一)
java集合系列——List集合之ArrayList介绍(二)
java集合系列——List集合之LinkedList介绍(三)
java集合系列——List集合之Vector介绍(四)
java集合系列——List集合之Stack介绍(五)
java集合系列——List集合总结(六)
java集合系列——Map介绍(七)
java集合系列——Map之HashMap介绍(八)
java集合系列——Map之TreeMap介绍(九)
java集合系列——Set之HashSet和TreeSet介绍(十)
如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!
欢迎访问我的csdn博客,我们一同成长!
“不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!”
博客首页:http://blog.csdn.net/u010648555
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/121184.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...