ArrayList擴容過程

如果通過無參構造的話,初始數組容量爲0,當真正對數組進行添加時,才真正分配容量。每次按照1.5倍(位運算)的比率通過copeOf的方式擴容。
在JKD1.6中實現是,如果通過無參構造的話,初始數組容量爲10,每次通過copeOf的方式擴容後容量爲原來的1.5倍,以上就是動態擴容的原理。

擴展源碼:

private void grow(int minCapacity) {

// overflow-conscious code
int oldCapacity = elementData.length;
//>>位運算,右移動一位。 整體相當於newCapacity =oldCapacity + 0.5 * oldCapacity
// jdk1.7採用位運算比以前的計算方式更快
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
//jdk1.7這裏增加了對元素個數的最大個數判斷,jdk1.7以前是沒有最大值判斷的,MAX_ARRAY_SIZE 爲int最大值減去8(不清楚爲什麼用這個值做比較)
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// 最重要的複製元素方法
elementData = Arrays.copyOf(elementData, newCapacity);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章