ArrayList原始碼分析

2021-10-24 12:46:00 字數 634 閱讀 9376

arraylist 是我們經常用到的,在jdk1.7中 和 1.8 些許不同

arraylist list = new arraylist();

底層建立了長度為10 的object[ ] 陣列elementdata, 當list . add(123) 時 其實是 elementdata [0] = new integer(123);

…list.add(11); 如果此次的新增 導致底層的elementdata 的陣列容量不足時,則會擴容,預設情況下,擴容為原來容量的1.5倍 ,同時需要將原來陣列的資料複製 到新的陣列當中。

結論 : 建議開發當中使用有參構造 ,傳遞乙個初始容量大小避免頻繁的擴容

arraylist list = new arraylist(); 底層object [ ] elementdata 沒有設定初始容量。

當 list . add( 1 ); 的時候才會建立長度為10 的陣列,並且將 1 新增到elementdata [0] = new integer(123);

…後續新增和擴容的操作 和 jdk1.7沒有區別

jdk 1.7 中的arraylist 的物件建立 類似於單例模式的餓漢式 ,而jdk8中的arraylist的物件的建立類似於單例的懶漢式,延遲了陣列的建立在某種意義上節省了記憶體空間

ArrayList原始碼分析

arraylist是平時使用很多的乙個類,趁有時間,我也閱讀以下原始碼,以幫助自己加深理解。類的層次結構這裡就不列出了,主要分析一下原始碼部分,屬性部分 protected transient int modcount 0 這個屬性是從abstractlist繼承過來的,每次arraylist進行結...

ArrayList原始碼分析

有參建構函式傳入乙個int public arraylist int capacity 如果為0則返回空陣列,否則new 乙個capacity的陣列 array capacity 0 emptyarray.object new object capacity 無參建構函式 public arrayl...

ArrayList原始碼分析

最近因為擁抱變換,所以開始無奈的面試之路。因為在集合的原始碼分析上,出了些問題,所以這段時間,好好重新理一理常用的集合原始碼。版本基於jdk1.7 毫無疑問,提到常用集合。arraylist勢必是第乙個被搬出來的,因此我們就先拿它開刀了。arraylist的初始化,只有在第一次add的時候進行new...