1. 程式人生 > 其它 >ArryList的原始碼邏輯(新增、刪除、獲取)

ArryList的原始碼邏輯(新增、刪除、獲取)

注:ArrayList的底層就是一個空的陣列elementData[],他是ArrayList的所有元素存放的容器。

1、ArrayList新增

  1. 在add新元素,首先會判斷是否需要擴容。進入判斷是否需要擴容方法。
  2. ↓ size+1(因為我們新增一個元素,這也是所需最小的容量)
  3. 進入是否需要擴容的方法後(1.需要計算擴容多少。2.計算好擴容紅高粱後,進行擴容方法)
  4. ↓ 進入計算擴容方法(傳入最少所需擴容量,elementData)
  5. 計入計算擴容計算方法(判斷傳入的elementData是否為空,如果是空,那麼預設擴容量10和最少擴容量那個大返回那個,。如果不是那麼直接返回最少空容量)
  6. ↓ 進入擴容方法(傳入計算好的擴容量)
  7. 擴容量減去elementData.lenngth()>0則需要擴容,小於0則不需要擴容
  8. ↓ 進入擴容方法(傳入最少擴容量)
  9. 擴容量=elementData..lenngth()+elementData.lenngth()》1(右移以為等於除以2)。進行擴容量和最少擴容比較,那個大擴容數量為那個。最終把擴容量賦值給elementData生成一個新的陣列
  10. ↓ 返回最開始的add方法
  11. 把傳入的元素放入elementData。

2、ArrayList刪除

  1. 通過size-下標-1的方式獲取到需要移動的元素個數。
  2. 把需要移動的元素移動到刪除元素下標的位置。
  3. 最後把刪除的元素值為空,jvm會進行垃圾回收