其他分享
首页 > 其他分享> > 集合 Vector

集合 Vector

作者:互联网

线程安全的ArrayList结构,初始容量为10

Vector<Integer> vector = new Vector<Integer>();

构造方法 :

第一次构造时候:调用无参构造方法: Vector vector = new Vector();

//调用 无参构造实际上是在间接的调用有参构造,只是两个参数都是默认设置的,this这个方法帮我们隐样的传递了
public Vector() {
   this(10);            // 调用this 传入了一个参数1,作用是初始化容量为10;
}

public Vector(int initialCapacity) {
   this(initialCapacity, 0);          //10作为initialCapacity传入:这是vector类的一个属性
}

public Vector(int initialCapacity, int capacityIncrement) {  //传入10,0,产生一个10容量的obj类型的数组
   super();
   if (initialCapacity < 0)
       throw new IllegalArgumentException("Illegal Capacity: "+
                                          initialCapacity);
   this.elementData = new Object[initialCapacity];   //如果 这个构方法被重写,10是可调的
   this.capacityIncrement = capacityIncrement;
}
//这里直接使用有参构造方法,跳过第一步无参构造后传参的步骤,默认容量随即被修改
Vector<Integer> vector2 = new Vector<Integer>(22,0);
		
		System.out.println(vector2.capacity());

添加元素:

public synchronized boolean add(E e) {
modCount++;//修改器计数器自增
ensureCapacityHelper(elementCount + 1);   //检查
//注意这里,先完成的扩容,后进行的复制,最后进行赋值也就是添加新的元素;
elementData[elementCount++] = e; //赋值
return true;
}
private void ensureCapacityHelper(int minCapacity) {
   // overflow-conscious code
   if (minCapacity - elementData.length > 0)
       grow(minCapacity);
}

private void grow(int minCapacity) {
   // overflow-conscious code
   int oldCapacity = elementData.length;
   int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                    capacityIncrement : oldCapacity);
//2倍自增扩容
   if (newCapacity - minCapacity < 0)
       newCapacity = minCapacity;
   if (newCapacity - MAX_ARRAY_SIZE > 0)
       newCapacity = hugeCapacity(minCapacity);
//扩容方式为数组的复制
   elementData = Arrays.copyOf(elementData, newCapacity);
}

//指定下标添加元素
public void add(int index, E element) {
   insertElementAt(element, index);
}
public synchronized void insertElementAt(E obj, int index) {
   modCount++;
//判断下标是否合法(是否超出有效范围)
   if (index > elementCount) {
       throw new ArrayIndexOutOfBoundsException(index
                                                    + " > " + elementCount);
   }
//
   ensureCapacityHelper(elementCount + 1);
//元素个数增速没有容量增速快,容量扩容频率没有添加元素频率高,所以要写if方法判断是否扩容;

   System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
   elementData[index] = obj;   //目标下标的添加元素
   elementCount++;  //自增
}
private void ensureCapacityHelper(int minCapacity) {
   // overflow-conscious code
   if (minCapacity - elementData.length > 0)//目标容量比当前长度大
       grow(minCapacity);//扩容
}

标签:index,Vector,int,elementData,initialCapacity,minCapacity,集合
来源: https://www.cnblogs.com/msslearning/p/14870755.html