arraylist的底層是乙個動態陣列,arraylist首先會對傳進來的初始化引數initalcapacity進行判斷,如果引數等於0,則將陣列初始化為乙個空陣列,如果不等於0,將陣列初始化為乙個容量為10的陣列。初始容量也可以自定義指定。隨著不斷新增元素,陣列大小增加,當陣列的大小大於初始容量的時候(比如初始為10,當新增第11個元素的時候),就會進行擴容,新的容量為舊的容量的1.5倍。
擴容的時候,會以新的容量建乙個原陣列的拷貝,修改原陣列,指向這個新陣列,原陣列被拋棄,會被gc**。
//arralist初始化容量判斷
public
void
ensurecapacity(int mincapacity)
}//新增元素的方法
public
boolean
add(e e)
//判斷是否需要擴容
private
void
ensureexplicitcapacity(int mincapacity)
//擴容的機制
private
void
grow(int mincapacity)
ArrayList的擴容方式和擴容時機
初始化 arraylist的底層是乙個動態陣列,arraylist首先會對傳進來的初始化引數initalcapacity進行判斷 擴容時機 當陣列的大小大於初始容量的時候 比如初始為10,當新增第11個元素的時候 就會進行擴容,新的容量為舊的容量的1.5倍。擴容方式 擴容的時候,會以新的容量建乙個原...
ArrayList的擴容時機和擴容方式
這裡我簡單介紹擴容機制的主要實現部分,對於一些理解能力很好的朋友,可以直接看這部分,後面的可以忽略 擴容時機,arraylist的擴容時機,主要看它底層的方法 private void ensureexplicitcapacity int mincapacity 主要判斷所需的長度大小是否小於陣列的...
ArrayList擴容和拷貝
arraylist 本質是乙個動態擴容的陣列,擴容時候是原來的1.5倍。核心 int newcapacity oldcapacity oldcapacity 1 向右邊移一位則是除於2 arraylist 如何新增或者刪除某個元素。新增乙個元素 判斷陣列容量不夠時候,就動態擴容為原來陣列容量的1.5...