1.Vector也是集合类,继承和实现方式如下,它也是实现了list接口。很多博客说Vector和ArrayList基本都是一样的,只不过Vector是线程安全的。但是具体是什么样的,还需要简单看看源码。当然其实还是有区别的,只是区别不大。
2.Vector的属性定义
具体的三个属性 解释看图中注释。Vector没有采取ArrayList临界值扩容的办法,而是每次不够的时候,直接根据capacity的值来增加。具体怎么增加后面会说。
Vector的构造方法如下。简单粗暴,如果调用无参构造函数,直接就将初始容量设置成了10,最终在右侧的构造方法里,将数组的长度设置为10,并初始化capacityIncrement。capacityIncrement这个值直接关系到数组扩容的方式。
、
具体来说,当capacityIncrement为正数时候,每次就增加capacityIncrement个数组长度,如果capacityIncrement为0,也就是我们通常调用无参构造方法的那种情况,这时候,每次扩容是变为原来的二倍,也就是增加一个Capacity。
3.为什么说Vector是线程安全的,因为它对外的接口方法加入了同步关键字----synchronized。如此,程序可以并发访问,也就避免了多线程带来的线程安全问题。图中给的例子比较少,基本去看看源码就知道了。其他时候,Vector并没有和ArrayList有本质的区别,所以就不一一看了。
4.总结
Vector也是基于动态数组实现的,默认初始化容量为10,每次扩容为原来的2倍或者增加给定的数量。如果扩容一次后,发现容量还不够,那么直接将容量设置为相应的大小。
Vector的方法通过同步关键字实现了同步,解决了ArrayList的线程安全问题,但是同时带来的是性能的下降。