HashMap總結(jié)

總結(jié):

1.HashMap的默認(rèn)大小為16,即桶數(shù)組的默認(rèn)長度為16;

2.HashMap的默認(rèn)裝載因子是0.75;

3.HashMap內(nèi)部的桶數(shù)組存儲的是Entry對象,也就是鍵值對對象。

4.構(gòu)造器支持指定初始容量和裝載因子,為避免數(shù)組擴(kuò)容帶來的性能問題,建議根據(jù)需求指定初始容量。裝載因子盡量不要修改,0.75是個比較靠譜的值。

5.桶數(shù)組的長度始終是2的整數(shù)次方(大于等于指定的初始容量),這樣做可以減少沖突概率,提高查找效率。(可以從indexfor函數(shù)中看出,h&(length-1),若length為奇數(shù),length-1為偶數(shù)那么h&(length-1)結(jié)果的最后一位必然為0,也就是說所有鍵都被散列到數(shù)組的偶數(shù)下標(biāo)位置,這樣會浪費(fèi)近一半空間。另外,length為2的整數(shù)次方也保證了h&(length-1)與h%length等效).

6.HashMap接受null鍵;

7.HashMap不允許鍵重復(fù),但是值是可以重復(fù)的。若鍵重復(fù),那么新值會覆蓋舊值。

8.HashMap通過鏈表法解決沖突問題,每個Entry都有一個next指針指向下一個Entry,沖突元素(不是鍵相同,而是hash值相同)會構(gòu)成一個鏈表。并且最新插入的鍵值對始終位于鏈表首部。

9.當(dāng)容量超過閾值(threshold)時,會發(fā)生擴(kuò)容,擴(kuò)容后的數(shù)組是原數(shù)組的兩倍。擴(kuò)容操作需要開辟新數(shù)組,并對原數(shù)組中所有鍵值對重新散列,非常耗時。我們應(yīng)該盡量避免HashMap擴(kuò)容。

10.HashMap非線程安全。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容