基礎:深入探索HashMap

1. 實現(xiàn)原理

解決哈希沖突(哈希碰撞)的辦法有很多准给,例如開放定址法、再散列函數(shù)法、鏈地址法等,HashMap采用的是鏈地址法败京。因此HashMap的底層是數(shù)據(jù)+鏈表的結(jié)構(gòu)。

從性能考慮互订,對鏈表的操作時間復雜度是O(n)叠赦,因此HashMap中的鏈表出現(xiàn)的越少,性能才會越好牲蜀。

兩個概念:capacity容量:默認值16笆制;loadFactor加載因子:默認值0.75。

2. 幾個問題

1. 為何HashMap的數(shù)組長度一定要是2的次冪涣达?

方便擴容后的resize操作在辆。擴容后只有一位差異,方便快速更新擴容后的位置度苔。

2. 為什么Map桶中個數(shù)超過8個才轉(zhuǎn)為紅黑樹匆篓?

桶中元素初始化是鏈表保存的,鏈表查找的時間復雜度是O(n)寇窑,而紅黑樹的查找性能為O(log(n))鸦概。當鏈表長度很小時,遍歷速度快甩骏,但鏈表長度增加后對查詢性能有一定影響窗市,因此引入TreeNode。

tips:TreeNode是類似于TreeMap的結(jié)構(gòu)横漏,底層是紅黑樹谨设。單個TreeNode需要占用的空間約是普通Node的兩倍。

當鏈表長度達到8則轉(zhuǎn)成紅黑樹缎浇,但當紅黑樹的節(jié)點數(shù)降低到小于等于6時則恢復為鏈表形態(tài)扎拣。說白了就是時間和空間的平衡思想。

當hashcode離散型良好的時候,樹型bin用到的概率非常小二蓝,因為數(shù)據(jù)均勻的分布在每個bin中誉券,幾乎不會有bin種鏈表長度達到閾值。但在隨機hashcode下刊愚,離散性可能變差踊跟,因此就可能導致不均勻的數(shù)據(jù)分布。不過理想情況下鸥诽,鏈表長度符合泊松分布商玫,一個鏈表長度達到8個元素的概率為0.00000006低于千萬分之一。

事實上牡借,鏈表長度超過 8 就轉(zhuǎn)為紅黑樹的設計拳昌,更多的是為了防止用戶自己實現(xiàn)了不好的哈希算法時導致鏈表過長,從而導致查詢效率低钠龙,而此時轉(zhuǎn)為紅黑樹更多的是一種保底策略炬藤,用來保證極端情況下查詢的效率。

3.資料擴充

  1. 解決hash沖突中的開放定址法

    當發(fā)生地址沖突時碴里,按照某種方法繼續(xù)探測哈希表中的其他存儲單元沈矿,直到找到空位置為止。注意對于利用開放地址法處理沖突所產(chǎn)生的哈希表中刪除一個元素時需要謹慎咬腋,不能直接地刪除羹膳,因為這樣將會截斷其他具有相同哈希地址的元素的查找地址,所以帝火,通常采用設定一個特殊的標志以示該元素已被刪除溜徙。

4. 參考資料

  1. https://www.cnblogs.com/linghu-java/p/10598758.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末湃缎,一起剝皮案震驚了整個濱河市犀填,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗓违,老刑警劉巖九巡,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蹂季,居然都是意外死亡冕广,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門偿洁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撒汉,“玉大人,你說我怎么就攤上這事涕滋〔欠” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長溯饵。 經(jīng)常有香客問我侵俗,道長,這世上最難降的妖魔是什么丰刊? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任隘谣,我火速辦了婚禮,結(jié)果婚禮上啄巧,老公的妹妹穿的比我還像新娘寻歧。我一直安慰自己,他們只是感情好秩仆,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布熄求。 她就那樣靜靜地躺著,像睡著了一般逗概。 火紅的嫁衣襯著肌膚如雪弟晚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天逾苫,我揣著相機與錄音卿城,去河邊找鬼。 笑死铅搓,一個胖子當著我的面吹牛瑟押,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播星掰,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼多望,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氢烘?” 一聲冷哼從身側(cè)響起怀偷,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎播玖,沒想到半個月后椎工,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡蜀踏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年维蒙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片果覆。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡颅痊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出局待,到底是詐尸還是另有隱情斑响,我是刑警寧澤吗讶,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站恋捆,受9級特大地震影響照皆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沸停,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一膜毁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧愤钾,春花似錦瘟滨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伙菊,卻和暖如春败玉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背镜硕。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工运翼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兴枯。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓血淌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親财剖。 傳聞我的和親對象是個殘疾皇子悠夯,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359