java stack list_java集合系列——List集合之Stack介绍(五)

本文详细介绍了Java中Stack类,它表示后进先出的对象堆栈,继承自Vector以数组实现。介绍了其继承关系、API方法如empty、peek、pop、push、search等,还给出了源码,并总结其实际通过数组实现,调用Vector方法,且拥有Vector属性和功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Stack的简介

Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

因为它继承自Vector,那么它的实现原理是以数组实现堆栈的。如果要以链表方式实现堆栈可以使用LinkedList!

2.Stack的继承关系

java.lang.Object

继承者 java.util.AbstractCollection

继承者 java.util.AbstractList

继承者 java.util.Vector

继承者 java.util.Stack

所有已实现的接口:

Serializable, Cloneable, Iterable, Collection, List, RandomAccess

并且从类 java.util.Vector 继承的字段

capacityIncrement, elementCount, elementData

从类 java.util.AbstractList 继承的字段

modCount

3.Stack的API

Stack API

Stack只有下面四个方法!由于Stack继承了Vector ,它也有Vector的API方法!

booleanempty()

测试堆栈是否为空。

Epeek()

查看堆栈顶部的对象,但不从堆栈中移除它。

Epop()

移除堆栈顶部的对象,并作为此函数的值返回该对象。

Epush(E item)

把项压入堆栈顶部。

intsearch(Object o)

返回对象在堆栈中的位置,以 1 为基数。

4.源码

public

class Stack extends Vector {

/**

* 创建一个空堆栈。

*/

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 -1

* 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的属性和功能!

欢迎访问我的csdn博客,我们一同成长!

"不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值