ArrayList与Vector区别(vector扩容)
相同:
- 都实现List接口,ArrayList怎么存怎么取数据,Vector也是。都是通过size获取有效长度。
- 底层都是数组结构。
区别:
- Arraylist内部原理是默认情况下创建一个长度10的数组,Vector也是,但ArrayList每次扩容1.5倍,Vector可指定扩容长度。
- Vector与Collection实现不同,Vector是同步的,即是单线程,所以速度慢
- vector扩容算法和arraylist基本一样,只是在计算新长度时做了判断,若增量<0,则新长度为两倍旧长度,若增量>0则新长度为(旧长度+增量)
Vector<Integer> v = new Vector<>();
v.add(100);
Vector(int initialCapacity, int capacityIncrement) 构造具有指定初始容量和容量增量的空向量。
private int newCapacity(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
if (newCapacity - minCapacity <= 0) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return minCapacity;
}
return (newCapacity - MAX_ARRAY_SIZE <= 0)? newCapacity: hugeCapacity(minCapacity);
}