ArrayList擴容和拷貝

2021-10-03 11:08:03 字數 767 閱讀 3479

arraylist :本質是乙個動態擴容的陣列,擴容時候是原來的1.5倍。

核心**: int newcapacity = oldcapacity + (oldcapacity >> 1);//向右邊移一位則是除於2

arraylist 如何新增或者刪除某個元素。

新增乙個元素:判斷陣列容量不夠時候,就動態擴容為原來陣列容量的1.5倍!!!並且新增元素索引後面的資料重新拷貝到新陣列上。

核心**:system.arraycopy(elementdata, index, elementdata, index + 1,

size - index);

刪除乙個元素:找到刪除元素的索引,並將刪除元素索引後面拷貝到新的陣列中去。

核心**:system.arraycopy(elementdata, index+1, elementdata, index,

nummoved);

概念引入:arraylist的拷貝過程(原始碼無實現,聽說是用c還是c++寫的。。。。從網上查到的):

重新拷貝的時候,如果拷貝的是基礎資料型別,採用的是深拷貝。而拷貝的是引用資料型別時採用的是淺拷貝

深拷貝:乙個物件拷貝另乙個物件的過程中,建立了新的物件(在記憶體中開闢了乙個空間,擁有乙個新的物件位址),並且將原來的物件裡的內容重新複製到新的物件上。當原來物件的內容發生改變時候,新的物件內容不會受到干擾。

淺拷貝:乙個物件拷貝另乙個物件的過程中,建立了新的物件,這個新的物件指向原來的物件,它的物件位址沒有發生改變。當原來物件的內容發生改變時候,新的物件內容也會發生改變。

ArrayList的擴容方式和擴容時機

arraylist的底層是乙個動態陣列,arraylist首先會對傳進來的初始化引數initalcapacity進行判斷,如果引數等於0,則將陣列初始化為乙個空陣列,如果不等於0,將陣列初始化為乙個容量為10的陣列。初始容量也可以自定義指定。隨著不斷新增元素,陣列大小增加,當陣列的大小大於初始容量的...

ArrayList的擴容方式和擴容時機

初始化 arraylist的底層是乙個動態陣列,arraylist首先會對傳進來的初始化引數initalcapacity進行判斷 擴容時機 當陣列的大小大於初始容量的時候 比如初始為10,當新增第11個元素的時候 就會進行擴容,新的容量為舊的容量的1.5倍。擴容方式 擴容的時候,會以新的容量建乙個原...

ArrayList的擴容時機和擴容方式

這裡我簡單介紹擴容機制的主要實現部分,對於一些理解能力很好的朋友,可以直接看這部分,後面的可以忽略 擴容時機,arraylist的擴容時機,主要看它底層的方法 private void ensureexplicitcapacity int mincapacity 主要判斷所需的長度大小是否小於陣列的...