ArrayList集合的底層分析

2021-08-18 21:06:36 字數 657 閱讀 2148

/*

*arraylist集合的底層是動態陣列的資料結構,如果我們新增了乙個預設的無參建構函式,

*在新增時,陣列會將預設的陣列長度變為10。(若只是剛剛建立集合物件,那麼這個陣列的長度為0,只有在新增時才會變為10)

*如果我們很確定的知道我們要儲存元素的數量,最好在宣告集合的時候傳入容量值。

*因為,我們如果只需要儲存3個元素,而我們宣告了乙個空參的建構函式,那麼集合的長度會是10,也就是說,陣列有7個長度的空間被浪費了,這就是對記憶體的一種浪費。

* *接著往下走,之後會判斷陣列的容量是否夠用,如果夠用,那麼不需要擴容,反之,則進行擴容,原始碼中是將陣列進行copy,而copyof的底層原始碼,是宣告了乙個新的陣列,

*然後將原有的陣列內容全複製進去,這樣,就在不影響原有資料的基礎上進行了陣列擴容(擴容增長因子為1.5)。

*我們需要儲存1000個元素,而一開始預設長度是10,那麼集合需要很多次擴容,每次擴容是上一次容量的1.5倍,每次擴容還要進行複製。

*如果不事先宣告乙個長度的話,使用效率會大大降低,即便是不知道具體數字,也可以指定乙個大概的容量。所以在宣告時盡量指定長度。

* */

public class arraylistdemo

}}

ArrayList的底層實現

1 底層是object陣列,叫做 elementdata 2 預設容量10,叫做 default capacity,不是初始容量 3 如果不指定初始容量,剛new出來的list如果沒有儲存任何物件,則容量為0,但是如果指定了初始容量,剛開始size也是為0 arraylistlist new arr...

ArrayList底層探秘

初始容量 private static final int default capacity 10 空陣列 private static final object empty elementdata 預設容量 private static final object defaultcapacity e...

ArrayList底層分析

arraylist實現於list randomaccess介面。可以插入空資料,也支援隨機訪問。相當於動態陣列,其中最重要的兩個屬性分別是 elementdata,以及size大小。在呼叫add 方法的時候 public boolean add e e 如果是呼叫add index,e 在指定位置新...