Vector概述
- Vector底层也是一个对象数组,protected Object[] elementData
- Vector是线程同步的,即线程安全,因为Vector 类的操作方法带有 synchronized,但效率不高。
- 在开发中,需要线程同步安全时,考虑使用Vector;如果不需要线程安全,推荐使用ArrayList代替Vector。
- Vector是动态数组实现的List,跟ArrayList一样,其容量能自动增长。
- Vector适用于快速访问和修改,不适用随机插入和删除。
- Vector初始容量大小为10,扩容由初始容量和capacityIncrement共同决定。
- Vector元素允许为null。
扩容机制
如果是无参,默认容量10,容量满后,就按2倍扩容
如果有参指定大小,则每次直接按2倍扩容
Vector与ArrayList比较
Vector与ArrayList的最大区别就是Vector是线程安全的,而ArrayList不是线程安全的。另外区别还有:
- ArrayList不可以设置扩展的容量,默认1.5倍
- Vector可以设置扩展的容量,如果没有设置,默认2倍
- ArrayList的无参构造方法中初始容量为0(初次调用add()会更新为10)
- Vector的无参构造方法中初始容量为10
- Vector线程安全
- ArrayList线程不安全
存储结构
// 存储元素
protected Object[] elementData;
// 实际元素个数
protected int elementCount;
// 扩容时增加量,大于0增加capacityIncrement,否则翻倍
protected int capacityIncrement;