目录
(1)Vector概述
Vector和ArrayList一样,都是通过数组实现的,但是Vector是线程安全的,这也导致它的效率不如ArrayList。
(2)Vector特点
-
和ArrayList相比,其中的很多方法都通过同步(synchronized)处理来保证线程安全。
-
如果涉及到多线程,那么就选择Vector(当然,也可以使用ArrayList并自己实现同步,但不推荐)。
-
如果不涉及到线程安全问题,那么使用ArrayList是更好的选择(因为Vector使用synchronized,必然会影响效率)。
-
二者的扩容策略不一样
Vector默认情况下自动扩容到原先的2倍,而ArrayList扩容到原先的1.5倍。
(3)源码分析
Vector特点:
- 没有无参构造懒分配空间的机制
- 所有的方法都是synchronized
(1)成员变量
elementData:存储用的数组
elementCount:当前集合的元素个数
capacityIncrement:扩容的增量
(2)构造函数
无参构造
调用了一个有参构造,实例化一个初始容量为10的Vector
有参构造:指定初始容量
调用了另一个有参构造,指定扩容增量为0
有参构造:指定初始容量和扩容增量
创建一个指定容量的Object数组,设置扩容增量。
ArrayList和Vector构造器的区别
ArrayList的无参构造不会分配数组空间,在第一次添加元素时才会分配默认的10个空间。
而Vector的无参构造,立马会创建默认的10个数组空间。
(3)add方法
注意,此方法是synchronized修饰的同步方法
。
调用ensureCapacityHelper()方法,进行扩容检测,然后将元素放入数组的指定索引。
如果最小需求容量比当前集合的长度大,调用grow()方法进行扩容:
扩容的策略有所不同:如果扩容增量>0,就每次额外增加“扩容增量”个空间。否则就每次将容量翻一倍。扩容增量默认为0
其余的扩容细节和ArrayList完全一致