ArrayList是一種基于動態(tài)數(shù)組實現(xiàn)的List接口,它可以根據(jù)需要動態(tài)地增長容量。當(dāng)需要往ArrayList中添加元素時,如果當(dāng)前容量不足,則會進行擴容操作。
ArrayList的擴容機制如下:
初始化時,ArrayList默認(rèn)容量為10,當(dāng)需要添加元素時,先判斷當(dāng)前元素個數(shù)是否達到容量上限,如果沒有達到,則直接添加元素。
如果當(dāng)前元素個數(shù)已經(jīng)達到容量上限,則進行擴容操作。擴容操作會新建一個容量為原來的1.5倍的數(shù)組,然后將原數(shù)組中的元素復(fù)制到新數(shù)組中。
對于大量元素的添加,擴容會成為瓶頸,因為它需要將原數(shù)組中的元素復(fù)制到新數(shù)組中,這個過程需要一定的時間。
需要注意的是,在多線程環(huán)境中,ArrayList是非線程安全的,因為多個線程可能同時對同一個ArrayList進行修改,這時候需要使用線程安全的List實現(xiàn),如CopyOnWriteArrayList。