相同点,都是继承AbstractList,而且内部都是用一个 protected Object[] elementData的数组用来保存数据,当vector默认是10个长度。而Arraylist是空。
ArrayList:
当list满的时候,扩容如下:
private static int newCapacity(int currentCapacity) {
int increment = (currentCapacity < (MIN_CAPACITY_INCREMENT / 2) ?
MIN_CAPACITY_INCREMENT : currentCapacity >> 1);
return currentCapacity + increment;
}
其中 private static final int MIN_CAPACITY_INCREMENT = 12;
也就是说,每次扩容,是在当前的容量加上6或者当前容量的一半。
Vector:
private void growByOne() {
int adding = 0;
if (capacityIncrement <= 0) {
if ((adding = elementData.length) == 0) {
adding = 1;
}
} else {
adding = capacityIncrement;
}
E[] newData = newElementArray(elementData.length + adding);
System.arraycopy(elementData, 0, newData, 0, elementCount);
elementData = newData;
}
也就是说,vector每次默认是增加1.当然如果有给capacityIncrement设置值得话,每次就会增加相应的个数。
网友评论