Vector
Vector
是比较早期的实现,底层同ArrayList
一样都是使用了可扩容的数组结构,扩容的方法有稍微的差别。Vector
中实现的方法几乎都是synchronized
同步方法,虽然是线程安全的但是性能上开销比较大,日常开发中已经很少会使用到了。基本上都被其他更好的选择代替了。这里记录一下,对比与ArrayList
。
Vector的结构与常量
1 | public class Vector<E> |
扩容机制
1 | //ArrayList在需要扩容的时,新数组的容量会变为原来的1.5倍,Vector在不指定增长系数时,通常会增加为原来的两倍。 |
增删改查
1 | //增加元素 |
总结
1.Vector
与ArrayList
实现原理是一样的,底层都使用了扩容数组,默认给的容量为10
2.Vector
的一些常用方法都加了锁synchronized
,这就导致了不必要的性能开销(不要同步方法的时候强制加锁,有点泛滥)
3.可以指定矢量增加系数capacityIncrement
,但是在扩容流程中会进行校验判断是否符合实际要求:1
2
3
4
5int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
//指定增长系数,校验是否符合
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
如果未指定capacityIncrement
则当需要时会扩容为原来的两倍,在性能造成了不必要的浪费(对比与ArrayList
的1.5)。
4.大多数情况下,已经不在使用,如果需要同步操作可以有更好的替代类(concurrent
下的集合)。