从下面的代码中可以看出代码块跟ArrayList的Add方法很像,只是加了一个syncronized关键字。
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
public synchronized E get(int index) {
if (index >= elementCount)
throw new ArrayIndexOutOfBoundsException(index);
return elementData(index);
}
同步
它的实现与ArrayList类似,但是使用了synchronized进行同步
扩容
protected int capacityIncrement;// 这里是int类型,扩容的时候不是算比例,而是直接跟capacityIncrement相加。
Vector的构造函数可以传入acpacityIncrement参数,它的作用是在扩容时使数组容增加acpacityIncrement个。如果这个参数的值小于等于0,扩容时每次对令capacity为原来的两倍。
与ArrayList比较
- Vector是同步的,因此开销就比ArrayList大,访问速度更慢。最好使用ArrayList而不是Vector,因为同步操作完全可以有程序员自己来控制。
- Vector每次扩容请求其大小的2倍(也可以通过构造函数设置增长的容量),而ArrayList是1.5倍
代替方案
可以使用Collections.synchronizedList();得到一个线程安全的ArrayList。或者使用CopyOnWriteArrayList
代码分析
可以参考ArrayList代码分析