栈(stack)是我们常用的基本数据结构之一,下面将简单剖析Java中stack 的数据结构。
1.类定义
public
class Stack<E> extends Vector<E> {
stack是继承与Vector的,也就是说,它是一个list实现。同时,继承了Vector的线程安全(效率较低~)。内部是数组实现(通过增长系数来扩容,增长系数为0时翻倍扩容)。
2.构造方法。
public Stack() {
}
该方法没有任何动作,完全就是实现了一个增长因子为0的Vector。
3.压入操作
public E push(E item) {
addElement(item);
return item;
}
压入操作就是在Vector的尾部添加元素。
4.弹出操作
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
弹出操作先取得Vector的长度,然后调用peek取得待返回对象,再删除Vector末尾元素。
5,读取操作
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
stack的读取操作只能读取栈中最近压入的数据,也就是Vector中的最后一位数据。当Vector为空时抛出异常,否则返回Vector末尾数据。
6.搜索操作
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
搜索操作返回离栈顶最近的匹配元素,也就是Vector的lastIndexOf(Object o)方法所返回的数据。
总结:stack就是一个封装了的Vector,然后利用Vector的api实现了stack的方法。因此它据有Vector的所有特点。