在Java中,ArrayList是通過動態(tài)數(shù)組實現(xiàn)的,它會根據(jù)需要自動增加容量。當(dāng)ArrayList的容量不足以容納新元素時,會自動增加容量。
ArrayList的自動擴容是由ensureCapacity方法實現(xiàn)的。當(dāng)需要添加新元素時,ArrayList會先檢查當(dāng)前容量是否足夠,如果不夠則會調(diào)用ensureCapacity方法進行自動擴容。
ensureCapacity方法的實現(xiàn)如下:
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);
}
}
該方法首先獲取當(dāng)前容量oldCapacity,然后判斷需要的最小容量minCapacity是否大于當(dāng)前容量。如果是,則計算新的容量newCapacity,通常是原容量的1.5倍加1。然后,使用Arrays.copyOf方法將元素數(shù)據(jù)elementData擴容到新的容量。
需要注意的是,ArrayList的自動擴容會導(dǎo)致數(shù)組的重新分配和拷貝,因此在頻繁添加大量元素時,可能會影響性能。為了避免頻繁的擴容操作,可以事先估計需要添加的元素數(shù)量,調(diào)用ArrayList的構(gòu)造函數(shù)或者ensureCapacity方法設(shè)置合適的初始容量。