java ArrayList和Vector的区别详解
ArrayList和Vector的区别
相同点:
1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口
2、底层都是数组实现的
3、初始默认长度都为10。
不同点:
1、同步性:
Vector中的public方法多数添加了synchronized关键字,以确保方法同步,也即是Vector线程安全,ArrayList线程不安全。
2、扩容不同
内部属性不同,这可能是导致扩容方式不同的原因所在。
ArrayList有两个属性,存储数据的数组elementData,和存储记录数目的size。
Vector有三个属性,存储数据的数组elementData,存储记录数目的elementCount,还有扩展数组大小的扩展因子capacityIncrement。
ArrayList的扩展方法
//jdk1.8.0_91
privatevoidgrow(intminCapacity){
//overflow-consciouscode
intoldCapacity=elementData.length;
intnewCapacity=oldCapacity+(oldCapacity>>1);
if(newCapacity-minCapacity<0)
newCapacity=minCapacity;
if(newCapacity-MAX_ARRAY_SIZE>0)
newCapacity=hugeCapacity(minCapacity);
//minCapacityisusuallyclosetosize,sothisisawin:
elementData=Arrays.copyOf(elementData,newCapacity);
}
可以看出,在满足扩容条件时,扩展后数组大小为原数组长度的1.5倍与传递参数中较大者
Vector的扩展方法
//jdk1.8.0_91
privatevoidgrow(intminCapacity){
//overflow-consciouscode
intoldCapacity=elementData.length;
intnewCapacity=oldCapacity+((capacityIncrement>0)?
capacityIncrement:oldCapacity);
if(newCapacity-minCapacity<0)
newCapacity=minCapacity;
if(newCapacity-MAX_ARRAY_SIZE>0)
newCapacity=hugeCapacity(minCapacity);
elementData=Arrays.copyOf(elementData,newCapacity);
}
可以看出,当扩容因子大于0时,新数组长度为原数组长度+扩容因子,否则子新数组长度为原数组长度的2倍。将上面生成的新数组长度与传递的参数长度作比较,较大者为最终的新长度。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短