【JDk源码解析之四】Vector源码解析

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的线程安全问题,但是同时带来的是性能的下降。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值