近在回顧數(shù)據(jù)結(jié)構(gòu),想到JDK這樣好的代碼資源不利用有點可惜,這是第一篇,花了心思。篇幅有點長,希望想看的朋友認(rèn)真看下去,提出寶貴的意見。 :)
類繼承體系圖
內(nèi)部原理
ArrayList 的3個字段
private transient Object[] elementData; //對象數(shù)組,用于存儲 持有對象的 引用 private int size; //代表了 ArrayList 的長度。隨著插入 刪除 添加 而改變。 protected transient int modCount = 0; //從AbstractList繼承得到,這個字段最后介紹,先忽視它。
ArrayList保存的真的是對象嗎?
elementData 是一個Object 數(shù)組,這是為了兼容任何類型(Java泛型是所有實際類型共享一份代碼模板的?。。。?。數(shù)組保存的實質(zhì)是持有對象的引用(reference)。引用又可以理解為 對象的“遙控器”(如下圖)。
從底層點的角度說,引用實質(zhì)是指針的化身,因此ArrayList即便持有很多個對象,其本身(或者說elementData 數(shù)組)保存的只不過是引用而已,內(nèi)存開銷不會太大。
所以要強調(diào)的是:對于保存引用類型,java中的數(shù)組,和各種集合類,持有的是對象的引用,而不是對象本身。
構(gòu)造函數(shù)
空ArrayList