- Vector与ArrayList
作为底层都是采用动态数组作为实现基础的类,Vector和ArrayList在很多方面都是大同小异的。在阅读之前本文之前可以先阅读ArrayList的源码解析,然后Vector基本就一目了然了。
说下他们的主要区别:
1. Vector里面的方法都是同步的,线程安全的。
2. Vector的扩容大小与ArrayList不同,Vector1.6和1.7中都是上一次大小的2倍。
3. Vector多了许多包含Element的方法 (Vector的子类栈Stack实际采用的是这些方法)
其次Vector比ArrayList还多了一个成员变量 capacityIncrement, 可以通过构造方法指定
// 自定义的扩容增长大小, 可以通过构造方法指定大小
protected int capacityIncrement;
// 在扩容的时候会使用到
// 1.6
int newCapacity = (capacityIncrement > 0) ?
(oldCapacity + capacityIncrement) : (oldCapacity * 2);
// 1.7
int newCapacity = oldCapacity +
((capacityIncrement > 0) ? capacityIncrement : oldCapacity);
然后如果不指定数据数组的大小,那么就和ArrayList一样,Vector的默认大小也是10。其余与ArrayList名称相同的方法,实现上没什么大的区别。
- Vector在java1.6和1.7
Vector在1.6和1.7基本没多少大的区别,首先在初始化上也基本相同。没有像ArrayList从1.6升到1.7ÿ