千鋒教育Java入門全套視頻教程(java核心技術(shù),適合java零基礎,Java
2023-07-22 10:45 作者:Cloud-yunduo | 我要投稿

- JDK1.7版本的HashMap的數(shù)據(jù)結(jié)構(gòu)是什么?
一維數(shù)組+單向鏈表
- HashMap默認初始化容量是多少?
1<<4 -- 16
- HashMap容量為什么必須是2的冪?
獲取元素在數(shù)組中的下標是 元素的hash值&數(shù)組的長度-1
如果數(shù)組的長度不是2的冪,-1就會導致二進制中的某幾位都是0,和元素的hash值做&運算,二進制上的某幾位就永遠是0,最終導致下標分布不均勻,浪費空間
- HashMap最大容量是多少?
1<<30 -- 1073741824
- HashMap最大容量為什么是1<<30?
HashMap容量為int類型,而且容量必須是2的冪
1<<30 是int取值范圍內(nèi)最大的二的冪的數(shù)字
- HashMap默認的負載因子是多少?
0.75f
- HashMap默認的負載因子為什么是0.75f?
取得了時間和空間的平衡
如果負載因子過大,利用了空間,浪費了時間
如果負載因子過小,利用了時間,浪費了空間
- 什么叫做Hash沖突/碰撞?
多個元素的hash值一樣,在數(shù)組中的下標也是一樣的
- 怎么避免hash沖突?
根據(jù)對象判斷標準,重寫hashCode和equals即可
- HashMap何時擴容?
如果映射關(guān)系個數(shù)大于等于閾值 并且 當前下標上的元素不為null,就擴容
- HashMap存放null鍵的位置在哪?
存放在下標為0的位置
- HashMap擴容機制是什么?
是原來長度的2倍
- JDK1.7版本的HashMap和JDK1.8版本的HashMap有何區(qū)別?
JDK1.7的HashMap
數(shù)據(jù)結(jié)構(gòu):一維數(shù)組+單向鏈表
計算hash值:位運算
單向鏈表插值法:頭插法
JDK1.8的HashMap
數(shù)據(jù)結(jié)構(gòu):一維數(shù)組 + 單向鏈表 + 紅黑樹
一維數(shù)組 + 單向鏈表 -- 鏈表長度>8 && 數(shù)組長度 > 64 --> 一維數(shù)組+紅黑樹 (目的:提高查詢效率)
一維數(shù)組 + 紅黑樹 -- 紅黑樹節(jié)點 < 6 --> 一維數(shù)組 + 單向鏈表
計算hash值:高16位 ^ 低16位(計算更加散列的hash值)
單向鏈表插值法:尾插法
標簽: