Java 之 Vector 集合

一、构造方法

Vector():构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。 
Vector(int initialCapacity) :使用指定的初始容量和等于零的容量增量构造一个空向量
Vector(int initialCapacity, int capacityIncrement):使用指定的初始容量和容量增量构造一个空的向量
Vector(Collection<? extends E> c) :构造一个包含指定 collection 中的元素的向量,这些元素按其 collection 的迭代器返回元素的顺序排列。

  源码跟踪:

   1、先看无参的构造方法:

    2、有一个 int 参数的构造方法

 

  3、有两个 int参数的构造方法

 

  总结:

  从上面的三个方法中可以看出,如果调用无参的构造方法,默认初始化的长度为10的数组,默认增量为0。

     当使用一个参数时,可以为其指定初始化容量。

  当使用两个参数的方法时,不仅仅可以指定初始化容量,还可以指定增量。

二、常用方法

  1、add(E e) 方法

    源码跟踪(JDK1.8):

 

 

 

    源码跟踪(JDK1.9):

 

 

 

 

    总结

    当调用 add(E e) 方法时,会调用第二张图的 add 方法,其中会检验长度是否够,如果不够,会调用图三的 grow 方法,grow 方法中调用了图四的 newCapacity 扩容方法,如果你手动指定了capacityIncrement的值,那么可以按照你指定增量进行扩容。如果没有默认值为0,会扩容为原来的2倍。

  2、add(int index,Object e)方法

    源码跟踪(JDK1.8)

 

 

   源码跟踪(JDK1.9):

   总结:

     可以看出,当调用add(index,Object) 方法后,实际上是调用的 insert 方法,首先进行了index的校验,然后是数组长度的校验,然后进行数据的插入。

  3、remove(int index) 方法

    源码跟踪(JDK1.8):

   总结:根据索引删除一个元素,会先进行索引的校验,然后判断需要挪动的元素的个数;如果为0个,不需要执行操作,节省时间,如果不为0,再移动数组。

  4、remove(Object) 方法

    源码跟踪(JDK1.8):

 

 

   总结

    当根据一个元素值删除时,会先去查找该值所在的索引,如果能够找到,在根据索引进行删除。

  5、indexOf(Object obj) 与 indexOf(Object obj, int index) 方法

    源码跟踪(JDK1.8):

 

 

   总结

    查询元素位置时,对元素进行分情况讨论,① 是null;② 不是 null。然后进行查找,第二个参数为指定开始查找的索引,如果不指定,默认从0开始查找。

  6、set(int index, Object obj) 方法

    源码跟踪(JDK1.8):

 

 

   总结:

    根据索引赋值时,首先进行索引的校验,然后把新值填充到指定索引的位置。

原文地址:https://www.cnblogs.com/niujifei/p/12073808.html