继承关系
public class Stack<E> extends Vector<E>
从继承关系来看,就知道Stack的数据结构也是数组
成员变量
Stack本身没有成员变量,不过它继承了Vector的成员变量
关键方法
1.构造方法
//空的构造方法
public Stack() {
}
子类构造函数默认会(隐式)调用父类的无参构造函数,它的父类是的参数构造函数,会创建一个容量为10的数组
2.其他方法
//入栈
public E push(E item) {
addElement(item);
return item;
}
调用vector的addElement方法,在数组尾部添加一个元素
//出栈
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
//取出栈顶元素
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
每次都从数组尾部取出元素,peek只会取出末尾的元素,而pop会删除末尾的元素
//获取指定元素在栈的位置,栈顶元素的位置为1
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
总结
Stack的代码很少,方法也就这么多,它的大部分都是调用的Vector的方法
Stack只是在Vector的基础上添加了入栈和出栈的操作,模拟了一下栈的先进后出的特点
Stack是线程安全的动态的可扩容的数组