Java 集合框架之 List 系列
Vector 学习总结 - 基于JDK1.8
ps:所有总结均是个人查看源码手写总结,未借鉴其他博客,转发请标明出处
Vector继承关系图:
上级抽象类:AbstractList
上级接口:Cloneable,Serializable,RandomAccess,List
元素:
Object[] elementData:底层实现,Object数组
int elementCount: 记录实际存储元素个数
int capacityIncrement: 每次扩容大小
构造方法比较简单,调用无参构造将设置初始容量为0, 扩容大小设置为0(设置为0只是一个标志)
public Vector(int initialCapacity)会将初始容量设置为参数,扩容大小设置为0设置为0只是一个标志 \
前二者最终都会调用此构造函数
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
add(E e)方法
// 在方法上加synchronized,锁定当前对象
public synchronized boolean add(E e) {
// 整体流程类似ArrayList的add方法,此处不赘述
modCount++;
// 需要注意的是在扩容时,若capacityIncrement为0则扩容至原容量2倍
// 否则增加容量为capacityIncrement
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
总结:
通过源码可发现Vector实际是JDK1.0就提供了的,ArrayList却是在其之后JDK1.2提供,现在此集合已经属于遗弃类了,原因是效率低,由于在对集合元素操作的大部分方法中加了同步方法锁,单线程情况下效率不如ArrayList,并且由于是大量方法锁,效率不如CopyOnWriteArrayList等JUC推出的线程安全的List,其底层实现和ArrayList一样,都是Object数组。
不推荐使用