Vector 源码解析:为什么它被 ArrayList 取代了?
2026/5/23 2:46:08 网站建设 项目流程

1. 什么是Vector

1. Vector是早期的动态数组集合(jdk1.0),在单线程下是线程安全的(synchronized)

2. Vector初始化时源码的变化

1. 初始化Vector


List<String> list1 = new Vector<>();

List<String> list2 = new Vector<>(50,0);


2. 对应的源码


public Vector() { this(10); }

//capacityIncrement是扩容的大小默认是0(意思是按照2倍来扩容),如果传入其他正整数就是在原有的基础上+正整数来进行扩容。如传入5,那么触发扩容时就是 原有容量 + 5

public Vector(int initialCapacity, int capacityIncrement) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; this.capacityIncrement = capacityIncrement; }

分析:如果是无参的构造方法那么初始容器的长度为10;如果规定了长度那么就创建对应长度的容器,如果来传入了扩容系数那么在扩容时就增加对应系数的容量

3. Vector添加元素时源码的变化

1. 添加元素


list1.add("one");


2. 对应源码


//1. 获取参数“one”

public synchronized boolean add(E e) {//2. 记录修改次数modCount++;//3. elementCount:元素数量(默认是0)ensureCapacityHelper(elementCount + 1);//6. 在位置0写入元素“one”,并且元素数量++elementData[elementCount++] = e; return true; }

//4.拿到minCapacity(最小容量):1

private void ensureCapacityHelper(int minCapacity) { // overflow-conscious code//5. 1-10(Vecotor默认数组长度),所以暂时不执行grow()if (minCapacity - elementData.length > 0)//7. 当元素数量达到扩容时执行,minCapacity==10grow(minCapacity); }

//8. 传入最小容量 10

private void grow(int minCapacity) { // overflow-conscious code//9. 记录老的容量 10int oldCapacity = elementData.length;//10. 新的容量 = 10+10(在capacityIncrement < 0时,也即按照默认的扩容;如果是capacityIncrement > 0,说明传入了扩容数量那么 新的容量 = 10 + capacityIncrement)int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);//11. 20-10=10 不成立不执行;如果capacityIncrement是负数会触发if (newCapacity - minCapacity < 0) newCapacity = minCapacity;//12. 一般不会添加21亿个数据,当然如果真的发生了那我也不知道该怎么办if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity);//13. 按照新的容量来创建新的数组并把内容写入,把引用指向新的对象elementData = Arrays.copyOf(elementData, newCapacity); }

4.总结

1. Vector是线程安全的容器(单线程环境下),性能不如araayLsit(因为Vector加锁)

2.Vector的默认扩容是2倍,也可以自定义扩容,而ArrayList是1.5倍

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询