Vector在jdk1.0版本就存在的一个并发列表类,Vector和ArrayList实现了非常相似的接口,集成了相同的类。和ArrayList不同的是,Vector是线程安全的,大部分的对外暴露的公共方法上,都添加了synchronized同步锁,很显然,同步锁的加入,使得Vector的性能并不高,要使用线程安全的List,则推荐CopyOnWriteArrayList。
一、Vector的类结构
从类的结构图看,Vector的类结构体系基本和ArrayList一致。
二、源码分析
/**
* 存储元素的object数组
*/
protected Object[] elementData;
/**
* 元素的个数
*/
protected int elementCount;
/**
* 容量增量,容量是动态变化的,如果capacityIncrement(=0或者<0)的时候,会以2倍容量进行扩容
*/
protected int capacityIncrement;
Vector可以存放任意类型的元素(包括null),允许重复,和ArrayList基本一致,内部的数据结构,也是Object数组,扩容也是动态扩容机制。
构造函数源码:
/**
* 根据初始容量、容量增长因子创建一个空的vector对象
*
* @param initialCapacity 初始容量
* @param capacityIncrement 容量增长因子
* @throws IllegalArgumentException 初始容量传了负数的时候,会抛异常
*/
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}