擴容機制:
原始碼如下:
mincapacity:最小需要的容量,也就是說儲存資料的陣列最小需要mincapacity所指定小長度。
private void ensureexplicitcapacity(int mincapacity)
private void grow(int mincapacity)一、先判斷最小需要的長度是否大於原本陣列的長度,如果大於,才需要擴容。
二、根據原本陣列的長度擴容一半,**如下:elementdata是arraylist中儲存真實資料的陣列
int oldcapacity = elementdata.length;
int newcapacity = oldcapacity + (oldcapacity >> 1);
三、擴容後的新長度與最小需要的長度對比,取值比較大的那個。
四、判斷要擴容的新長度是否會超過jvm對陣列長度的限制(integer.max_value-8),如果大於integer.max_value-8,那就嘗試建立integer.max_value長度的陣列,此時在有些虛擬機器上會溢位。
ArrayList原始碼理解
與linkedlist原始碼理解放在一起查閱,效果更好 對隊成員變數的分析,可以知道arraylist的資料結構 對add 方法的分析,可以得知arraylist新增資料的效率不高 對get 方法的分析,可以看出arraylist查詢的效率非常高 對remove 方法的分析,可以了解到arrayli...
簡單理解ArrayList原始碼
1.arraylist是動態擴容的,每次擴容為原來長度的1.5倍,並且採用的是懶載入策略,當第一次呼叫add方法時,陣列才會擴容為10 預設值 2.模擬實現list介面 public inte ce list 自己實現的myarraylist在構造方法中陣列就初始化大小為10,原始碼中在第一次呼叫a...
ArrayList原始碼分析
arraylist是平時使用很多的乙個類,趁有時間,我也閱讀以下原始碼,以幫助自己加深理解。類的層次結構這裡就不列出了,主要分析一下原始碼部分,屬性部分 protected transient int modcount 0 這個屬性是從abstractlist繼承過來的,每次arraylist進行結...