一、构造方法
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):
总结:
根据索引赋值时,首先进行索引的校验,然后把新值填充到指定索引的位置。