| 集合類(lèi)存放在 
 一、ArrayList(數(shù)組)ArrayList內(nèi)部是通過(guò)數(shù)組實(shí)現(xiàn)的,它允許對(duì)元素進(jìn)行快速隨機(jī)訪問(wèn)。 缺點(diǎn)是每個(gè)元素之間不能有間隔,當(dāng)數(shù)組大小不滿(mǎn)足時(shí)需要增加存儲(chǔ)能力,就要將已經(jīng)有數(shù)組的數(shù)據(jù)復(fù)制到新的存儲(chǔ)空間中。當(dāng)從 ArrayList 的中間位置插入或者刪除元素時(shí),需要對(duì)數(shù)組進(jìn)行復(fù)制、移動(dòng)、代價(jià)比較高。因此,它適合隨機(jī)查找和遍歷,不適合插入和刪除。 
 二、LinkedList(鏈表)
 
 三、HashMap(數(shù)組+鏈表+紅黑樹(shù))HashMap根據(jù)鍵的hashCode值存儲(chǔ)數(shù)據(jù),大多數(shù)情況下可以直接定位到它的值,因而具有很快的訪問(wèn)速度,但遍歷順序卻是不確定的。HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。 HashMap非線程安全,即任一時(shí)刻可以有多個(gè)線程同時(shí)寫(xiě)HashMap,可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。如果需要滿(mǎn)足線程安全,可以用 Collections 的 synchronizedMap 方法使 HashMap 具有線程安全的能力,或者使用  HashMap源碼解析——HashMap.hsah(Object key)
 關(guān)鍵變量
 HashMap源碼解析——resize
 JAVA 7 實(shí)現(xiàn)
 HashMap里面是一個(gè)數(shù)組,然后數(shù)組中每個(gè)元素是一個(gè)單向鏈表。上圖中,每個(gè)綠色的實(shí)體是嵌套類(lèi)Entry 的實(shí)例,Entry包含四個(gè)屬性:key, value, hash值和用于單向鏈表的next。 
 JAVA 8 實(shí)現(xiàn)
 Java 8 對(duì) HashMap 進(jìn)行了一些修改,最大的不同就是利用了紅黑樹(shù),所以其由數(shù)組+鏈表+紅黑樹(shù)組成。 | 
|  | 
來(lái)自: 頭號(hào)碼甲 > 《待分類(lèi)》