Stack是什么
- Stack是继承于Vector的基础上实现的栈
- Stack的特性就是队列的先进后出
class Stack<E> extends Vector<E>{}
Vector有的特性,Stack也有,复习下Vector的特性
- Vector是基于可变数组的List接口的同步实现
- Vector是有序的
- Vector允许null键和null值
- Vector已经不建议使用了
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable{
}
- Vector实现了List接口、底层使用数组保存所有元素,其操作基本上是对数组的操作
- Vector继承了AbstractList抽象类,它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能
- Vector实现了RandmoAccess接口,即提供了随机访问功能,RandmoAccess是java中用来被List实现,为List提供快速访问功能的,我们可以通过元素的序号快速获取元素对象,这就是快速随机访问
- Vector实现了Cloneable接口,即覆盖了函数clone(),能被克隆
- Vector实现了java.io.Serializable接口,意味着ArrayList支持序列化
Stack的入队
Stack入队就是将对象加入到队列中,而后面的数据将会往后移动
public E push(E item) {
addElement(item);
return item;
}
Stack的出队
Stack出队就是将移除最后一个对象,相当于Stack的先进后出特性
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
Stack的栈顶
Stack的peek方法可以查询Stack的栈顶对象
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
Stack的查询
Stack支持数据的查询,调用lastIndexOf方法会从尾部遍历所有元素,找到对应的元素
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
总结
Stack的源码就这么点,只不过是延续了Vector的特性,其最大的区别是Stack拥有栈的概念,即先进后出的特性