ArrayList的擴容方式和擴容時機

2021-08-22 13:28:20 字數 606 閱讀 2906

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...