集合——Vector

  • Vector线程安全,数据存储方式为数组
  • 举例说明
public class test {
    public static void main(String[] args) {
        //构造一个Vector对象,对象中熟组默认长度为10
        Vector vector = new Vector();
        //循环添加数据
        for (int i= 0 ;i < 10 ; i++){
            vector.add(i);
        }
        //打印输出
        System.out.println(vector);
    }
}
  1. Vector vector =newVector();
public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    //默认调用无参构造,并间接调用有参构造,为数组指定长度为10
    public Vector() {
        this(10);
    }
}

2. vector.add(i);

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
      //为数组添加元素
      public synchronized boolean add(E e) {
        //操作记录数
        modCount++;
        //判断数组长度是否充足,否则扩容
        ensureCapacityHelper(elementCount + 1);
        //将元素赋予当前下标
        elementData[elementCount++] = e;
        return true;
    }
}

3. ensureCapacityHelper(elementCount +1);

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
      private void ensureCapacityHelper(int minCapacity) {
        // overflow-conscious code
        //如果当前数组所需的长度 - 当前数组的长度 > 0,则进行扩容
        if (minCapacity - elementData.length > 0)
            //扩容
            grow(minCapacity);
    }
}

4. grow(minCapacity);

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
      private void grow(int minCapacity) {
        // overflow-conscious code
        //获取当前数组的长度
        int oldCapacity = elementData.length;
        /*如果容量 > 0 扩容后的长度 = 原数组长度 + capacityIncremrnt 
          否则 扩容后的长度 = 原数组长度 * 2
        */
        int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                         capacityIncrement : oldCapacity);
        //如果扩容后的长度 - 数组所需要的最小长度  < 0 最小长度 = 扩容后的大小
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        //如果达到最大长度
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
    <span class="hljs-comment">//将原属组数据拷贝到扩容后的数组中
    elementData = Arrays.copyOf(elementData, newCapacity);
}

}

5. 回到add方法中,将元素赋予数组当前下标

//将元素赋予当前下标
elementData[elementCount++] = e;

END

上一篇:集合框架2- ArrayList


下一篇:java基础之ArrayList