以如下代码,对底层扩容代码解读
Vector vector = new Vector();
// Vector vector = new Vector(8);
for (int i = 0; i < 10; i++) {
vector.add(i);
}
vector.add(10);
无参构造器 Vector vector = new Vector();
执行Vector vector = new Vector()后,将会执行无参构造函数Vector(),无参构造函数中将会调用有参构造函数Vector(10),故会创建一个容量为10的Vector集合。
当程序运行到vector.add(10)时,此时Vector容器已满,将会继续扩容
(1) modCount++ 记录被修改的次数 (2) 执行ensureCapacityHrlper
(1)判断容量大小是否充足 (2)如果容量不足,调用grow()
扩容机制:newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); 此时capacityIncrement为0,oldCapacity为10,故 newCapacity为20,所以,最后容量扩为20.
有参构造器 Vector vector = new Vector(8);
执行Vector vector = new Vextor(8)时,会直接执行有参构造函数vector(8), 后续扩容与无参构造函数一样。
总结:Vector扩容机制,无参第一次扩容为10,有参构造第一次扩容为指定数量扩容。后续扩容为之前容量的两倍
当执行Vector vector = new Vector(2.3),会调用如下的构造方法
此时capacityIncrement为3
当再次扩容时 newCapacity = oldCapacity + capacityIncrement
故,Vector集合扩容会按照自己所定义的大小扩容。