Collection源码分析(七):Vector源码分析

点开Vector的源码 可以看到 这个类继承自AbstractList 实现了List<E>, RandomAccess, Cloneable, java.io.Serializable三个接口,是不是感觉和ArrayList很像

注意到 Vector主要的三个变量

elementData是一个Object的数组

elementCount是这个数组的下标变量,后面会用到。

capacityIncrement 这个值 则是这个数组的扩容值

同样的 我们从方法入手 实例化方法:

这个实例化方法同arrayList的实例化方法一样,实例化一个初始长度为10的Object数组

add方法

1.可以看到 这个add 是同步的 synchronized 这点不同于ArrayList的add方法所以说 这个是线程安全的

2.而扩容方法采取以下规则:如果capacityIncrement>0 则在以前的基础上 扩容capacityIncrement的长度

否则 将原来的长度扩容一倍

3.然后将原来的数据 拷贝至新数组里面

可以看出 需要自定义Vector的每次扩容值 只需要通过

两个带参数的构造器实例化赋值即可。

同样的Vector的remove方法 也是synchronized修饰 是线程安全的

所以 Vector相比于ArrayList是一个线程安全的数组结构。

猜你喜欢

转载自my.oschina.net/u/2970507/blog/1819943