Vector与Stack
Stack是栈,Vector是矢量
Vector
Vector维护的是一个数组
protected Object[] elementData;
方法实现的内容与ArrayList基本一致。
但是Vector是线程安全的,所以的方法几乎都有synchronized修饰
如果不定义Vector的数组的每次的增长长度,那么默认是两倍增长
Stack
public class Stack<E> extends Vector<E>
Stack继承了Vector,添加了如下方法
push方法直接调用了父类Vector的addElement方法。
public E push(E item) {
addElement(item);
return item;
}
peek是返回栈顶元素,并不删除
pop是从栈顶弹出,但是弹出去之后这个元素也会被删除了。它是调用peek,在peek的基础上加了一个removeElementAt方法,实现了方法的复用。
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);
}
empty就是查看当前的栈内是否为空。
public boolean empty() {
return size() == 0;
}
search查找元素的栈深。
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
Vector与Stack用了大量的Synchronized,所以效率会很低。