在Java中,ArrayList是通過動態數組實現的,它會根據需要自動增加容量。當ArrayList的容量不足以容納新元素時,會自動增加容量。
ArrayList的自動擴容是由ensureCapacity方法實現的。當需要添加新元素時,ArrayList會先檢查當前容量是否足夠,如果不夠則會調用ensureCapacity方法進行自動擴容。
ensureCapacity方法的實現如下:
private void ensureCapacity(int minCapacity) {
int oldCapacity = elementData.length;
if (minCapacity > oldCapacity) {
int newCapacity = (oldCapacity * 3) / 2 + 1;
if (newCapacity < minCapacity) {
newCapacity = minCapacity;
}
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
該方法首先獲取當前容量oldCapacity,然后判斷需要的最小容量minCapacity是否大于當前容量。如果是,則計算新的容量newCapacity,通常是原容量的1.5倍加1。然后,使用Arrays.copyOf方法將元素數據elementData擴容到新的容量。
需要注意的是,ArrayList的自動擴容會導致數組的重新分配和拷貝,因此在頻繁添加大量元素時,可能會影響性能。為了避免頻繁的擴容操作,可以事先估計需要添加的元素數量,調用ArrayList的構造函數或者ensureCapacity方法設置合適的初始容量。