ArrayList源碼解讀(JDK8)

在這裏插入圖片描述
首先,我們可以看到,ArrayList繼承的是AbstractList抽象類,實現的是List接口
在這裏插入圖片描述

ArrayList的成員變量都用private static final來進行修飾,默認的容量是10

在這裏插入圖片描述

我們從上面的ArrayList的構造函數可以得知,如果不設置initialCapacity,創建實例對象時,系統默認的capacity爲默認的0.

接下來,我們來看看ArrayList的add()方法(未設置初始容量,就在方法中爲默認容量)
在這裏插入圖片描述

add()操作之前,我們需要判斷Capacity容量是否足夠,我們接着進入ensureCapacityInternal

在這裏插入圖片描述
ensureCapacityInternal底層這裏有兩個方法,參數中的方法
在這裏插入圖片描述

會返回當前容量和elmentData的最大值。

在這裏插入圖片描述

在這裏,就是核心的grow方法了,如果判斷出增加後,容量大於了Capacity,那就必須擴容了,我們接着往下看
在這裏插入圖片描述

我們可以從紅框中看到,newCapacity是在原來的Capacity+(Capacity>>1)得來的。
接下來,我們看看remove方法
在這裏插入圖片描述

首先我們進入,rangeCheck()方法

在這裏插入圖片描述

發現這是一個檢查下標是否越界
然後繼續往下閱讀源代碼,我們發現,實現的是一個數組拷貝功能來完成元素的刪除。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章