Vector原理

5 阅读1分钟

Vector 重点

  • 无参构造情况下,默认大小10,存满后,按当前容量的2倍扩容;
  • 指定大小的情况下,如需扩容,则直接扩容为上一次elementData容量的2倍;
  • 指定大小和扩容增量(capacityIncrement)时,每次按指定的扩容增量扩容;

主要代码

Vector的add()方法被synchronized修饰

public synchronized boolean add(E e) {  
    ...
}
//在扩容时用来判断的容量增量,默认为0,用于指定扩容增量时使用
protected int capacityIncrement;
private void grow(int minCapacity) {
 
       //将原先的数组长度赋给oldCapacity
       int oldCapacity = elementData.length;
       
       //主要内容
       int newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);
       
       if (newCapacity - minCapacity < 0)
           newCapacity = minCapacity;
 
       if (newCapacity - MAX_ARRAY_SIZE > 0)
           newCapacity = hugeCapacity(minCapacity);
           
       //创建一个类型相同,长度为newLength的数组,并将其返回,实现扩容
       elementData = Arrays.copyOf(elementData, newCapacity);
}