ArryList的原始碼邏輯(新增、刪除、獲取)
阿新 • • 發佈:2022-02-20
注:ArrayList的底層就是一個空的陣列elementData[],他是ArrayList的所有元素存放的容器。
1、ArrayList新增
- 在add新元素,首先會判斷是否需要擴容。進入判斷是否需要擴容方法。
- ↓ size+1(因為我們新增一個元素,這也是所需最小的容量)
- 進入是否需要擴容的方法後(1.需要計算擴容多少。2.計算好擴容紅高粱後,進行擴容方法)
- ↓ 進入計算擴容方法(傳入最少所需擴容量,elementData)
- 計入計算擴容計算方法(判斷傳入的elementData是否為空,如果是空,那麼預設擴容量10和最少擴容量那個大返回那個,。如果不是那麼直接返回最少空容量)
- ↓ 進入擴容方法(傳入計算好的擴容量)
- 擴容量減去elementData.lenngth()>0則需要擴容,小於0則不需要擴容
- ↓ 進入擴容方法(傳入最少擴容量)
- 擴容量=elementData..lenngth()+elementData.lenngth()》1(右移以為等於除以2)。進行擴容量和最少擴容比較,那個大擴容數量為那個。最終把擴容量賦值給elementData生成一個新的陣列
- ↓ 返回最開始的add方法
- 把傳入的元素放入elementData。
2、ArrayList刪除
- 通過size-下標-1的方式獲取到需要移動的元素個數。
- 把需要移動的元素移動到刪除元素下標的位置。
- 最後把刪除的元素值為空,jvm會進行垃圾回收