一、Vector和Stack简单介绍
Vector和ArrayList一样,均是属于List的实现类,现在我们主要说明两者的异同点及和Stack的关系;让我们能够更加清晰的认识该集合类型。
相同点:
1、均是List集合的实现类
2、底层数据存储结构 Objcet 类型的数组
不同点:
1、ArrayList的容量大小的怎长策略不同,ArrayList在无参数构造时候容量为0,后面调用add(E e)方法时候通过容量判断给定初始值为10,而Vector在无参初始化时候就给定初始容量大小为10
2、在调用add(E e)添加元素时候均调用ensureCapacityHelper(int minCapacity)方法判断容量是否足够,但是对于容量不足后两者怎长策略不一样,ArrayLis为增长为1.5倍(oldLength+oldLength>>1);而Vector增长为2培(oldLength+oldlength)
3、在方法上,Vector供外部类访问的方法均是synchronized修饰属于线程安全的,而ArrayList没有
而对于Stack而言,它是Vector的子类,还提供了LIFO(last in first out)后进先出的数据结构特点
二、Vector源码分析
1、重要属性和构造函数
//存储数据的数组
protected Object[] elementData;
//元素的个数
protected int elementCount;
//增加的容量
protected int capacityIncrement;
//序列化版本号
private static final long serialVersionUID = -2767605614048989439L;
//根据给定的容量和增长容量初始化容器
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)//参数检查
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
//根据给定容量初、增长值为0 始化构造