1 继承结构图
Vector同样继承自AbstractList,与ArrayList、LinedList一样,是List的一种实现。
与ArrayList一样,Vector也是使用对象数组记录元素的值,记录数组长度使用elementCount,与ArrayList不一样的是,Vector每次数组扩容的长度可在初始化的时候设置,用变量capacityIncrement记录。
如上有四种构造方法,支持无参构造,设定初始长度构造、初始长度和扩容增长长度构造和传入一个Collection对象进行构造。
其余三种构造方法与ArrayList基本一样,只是与ArrayList不一样的是,Vector支持在构造的时候设定每次动态扩容数组长度增长的值,而ArrayList默认每次扩容都是在当前数组长度的基础上增加一般,具体实现如下:
而Vector如果在初始化的时候不设置这个值得话,每次扩容则在当前数组长度的基础上增加一倍,实现如下:
Vector作为List的一种实现,由于其与ArrayList一样使用对象数组来保存元素,所以其提供的方法与ArrayList基本类似,但是所有方法的定义都多了一个关键字synchronized,相信大家已经知道Vector存在的意义了,那么就是Vector是线程安全的。这也是它与ArrayList的根本区别。
这也决定了ArrayList和Vector在使用上的区别。由于ArrayList不考虑线程安全,所以在执行效率上,ArrayList是优于Vector的,所以在不需要考虑线程安全,或者永远都只会有一个线程能访问到List对象时,最好使用ArrayList,而在可能会有多个线层访问同一个List集合时,使用Vector无疑是最佳选择,因为它的实现已经考虑了线程安全的问题。