Vector源码解析
1. Vector概述及继承体系
Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。与新 collection 实现不同,Vector 是同步的。
看一下Vector的继承体系:
public class Vector<E>extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
RandomAccess接口是在源码中的注释如下:
Marker interface used by List implementations to indicate that they
support fast (generally constant time) random access.
翻译下就是:这是一个标记性的接口,谁实现了这个接口就表明他具有快速随机访问的能力。
2. Vector属性
capacityIncrement:自动扩容的大小,即当数组满了之后,就添加capacityIncrement个空间装载元素,如果capacityIncrement<=0,则扩容时就扩容到目前Vector容量的两倍。
elementCount:记录数组中数据的个数。
elementData:数组,因为Vector底层也是数组存储的,所以用这个来存储数据。
protected int capacityIncrement; //扩容大小
protected int elementCount; //数组数据条数
protected Object[] elementData; //数组
3. Vector构造方法
Vector构造方法有四个构造方法
3.1.Vector()
构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
public Vector() {
this(10);//这里的this调用的是Vector(int initialCapacity) 方法
}
3.2.Vector(Collection <\?extends E> c)
构造一个包含指定 collection 中的元素的向量,这些元素按其 collection 的迭代器返回元素的顺序排列。
public Vector(Collection<? extends E> c) {
elementData = c.toArray();
elementCount = elementData.length;
// c.toArray might (incorrectly) not return Object[] (see 6260652)
//c.toArray可能(不正确)不返回Object [](参见6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
//用Arrays.copyOf()方法转换类型。
}
3.3.Vector(int initialCapacity)
使用指定的初始容量和等于零的容量增量构造一个空向量。
public Vector(int initialCapacity) {