近在回顧數(shù)據(jù)結(jié)構(gòu),想到JDK這樣好的代碼資源不利用有點(diǎn)可惜,這是第一篇,花了心思。篇幅有點(diǎn)長(zhǎng),希望想看的朋友認(rèn)真看下去,提出寶貴的意見(jiàn)。  :)

 

類(lèi)繼承體系圖                     

                                   大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 

內(nèi)部原理

ArrayList 的3個(gè)字段

private transient Object[] elementData;      //對(duì)象數(shù)組,用于存儲(chǔ) 持有對(duì)象的 引用
 private int size;                           //代表了 ArrayList 的長(zhǎng)度。隨著插入 刪除 添加 而改變。
 protected transient int modCount = 0;      //從AbstractList繼承得到,這個(gè)字段最后介紹,先忽視它。

 

 

ArrayList保存的真的是對(duì)象嗎?
elementData 是一個(gè)Object 數(shù)組,這是為了兼容任何類(lèi)型(Java泛型是所有實(shí)際類(lèi)型共享一份代碼模板的?。。。?。數(shù)組保存的實(shí)質(zhì)是持有對(duì)象的引用(reference)。引用又可以理解為 對(duì)象的“遙控器”(如下圖)。

 

從底層點(diǎn)的角度說(shuō),引用實(shí)質(zhì)是指針的化身,因此ArrayList即便持有很多個(gè)對(duì)象,其本身(或者說(shuō)elementData 數(shù)組)保存的只不過(guò)是引用而已,內(nèi)存開(kāi)銷(xiāo)不會(huì)太大。


所以要強(qiáng)調(diào)的是對(duì)于保存引用類(lèi)型,java中的數(shù)組,和各種集合類(lèi),持有的是對(duì)象的引用,而不是對(duì)象本身。

 

大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

 

 

 

構(gòu)造函數(shù)

空ArrayList