JDK 文档中对Vector的描述是这样的:Vector 类实现了一个可增长的对象数组。像数组一样,可以通过整型索引来获取内容,但是 Vector 的大小可以按照实际元素数量的需求进行增长或收缩。Vector 和 ArrayList 非常接近,区别在于 ArrayList 的实现是非同步的,在多线程环境中可能出现线程不安全的情况,而 Vector 则是线程安全的。
Stack 类实现的就是我们非常常用的一种数据结构,栈,也称之为后进先出队列(LIFO)。栈的基本概念自不必多说,Java 中 Stack 类是基于 Vector 来实现的。
实际上,Vector 和 Stack 类已经不被推荐使用了,之所以仍然还保留是出于兼容性方面的考虑。通常情况下可以使用 ArrayList 来替代 Vector,在一些需要保证线程安全的情况下在外部进行同步或者使用Collections.synchronizedList
方法。至于 Stack,官方的推荐是使用 Deque 接口的实现进行替代。
public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
class Stack<E> extends Vector<E>
从类的声明来看,Vector 类和 ArrayList 是完全一致的,实际上它们俩的内部实现也是大致相同的,只是 Vector 类中的所有方法都使用 synchronized
关键字进行了修饰。
。。。
Stack 就是 Vector 的子类,对栈的所有操作 pop()
、push()
、peek()
都是在 Vector 的基础上进行实现的。
add 与 push
/**
* Appends the specified element to the end of this list.
*
* <p>This method is equivalent to {@link #addLast}.
*
* @param e element to be appended to this list
* @return {@code true} (as specified by {@link Collection#add})
*/
public boolean add(E e) {
linkLast(e);
return true;
}
List+Deque
LinkedList既实现List,也实现了Deque
既可以作为链表,也可以作为队列