Java 集合框架------ArrayList原始碼分析

你怎麼敢的呀發表於2020-10-31

ArrayList的使用:

儲存結構 陣列,查詢遍歷速度更快,增刪慢

 

例子:ArrayList可以直接例項化

 

 

原始碼分析

 

DEFAULT_CAPACITY = 10; 預設容量  

       注意:沒有向集合中新增任何元素時,容量 0 ,新增任意一個元素之後  容量 10

           每次擴容大小是原來的 1.5 倍

elementData   存放元素的陣列      

size  實際元素個數(小於10) 

 

提出問題: 預設容量的 10 是怎麼來的???

add()方法 

檢視 ensureCapacityInternal 方法:

此時的 if 條件成立,max函式其實就是在判斷 10 和 1 的大小,1 是怎麼來的?函式ensureCapacityInternal傳過來的值為 1。此時的minCapacity變成了 10 

檢視 ensureExplicitCapacity方法

if 條件也還是成立,判斷的是 10 - 0 > 0 ,檢視grow方法

 

>> 右移  ,10右移一位變成了 5 ,所以擴容的時候容量是原來的 1.5 倍

這裡的 if 條件: newCapacity 減去一個很大很大的數,好幾億,條件不成立,所以執行下面的程式碼  copyOf

 

ArrayList 和 Vector的區別請看 : Vector

相關文章