HashMap

1 HashMap 結(jié)構

  • 底層數(shù)據(jù)結(jié)構进宝,1.7 和 1.8有什么不同

??① 1.7 數(shù)組 + 鏈表堡妒, 1.8 數(shù)組 +(鏈表 | 紅黑樹)

  • 為何要用紅黑樹呼股,為何不一上來用紅黑樹,紅黑樹化的閾值為何是 8 刷喜,何時會樹化财喳,何時會退化為鏈表察迟?

?① 紅黑樹用來避免Dos攻擊,避免鏈表超長時性能下降耳高,樹化應當是偶然情況
??1) hash 表的查找扎瓶,更新的時間復雜度是O(1),而紅黑樹的查找泌枪,更新的時間復雜度是O(log??)概荷,TreeNode 占用空間也比普通Noed的大,如非必要工闺,盡量還是使用鏈表
??2)hash 值如果足夠隨機乍赫,則在hsah表內(nèi)按泊松分布,在負載因子0.75的情況下陆蟆,長度超過8的鏈表出現(xiàn)概率是0.00000006雷厂,選擇8就是為了讓樹化幾率足夠小
?② 樹化兩個條件: 鏈表長度超過樹化閾值;數(shù)組容量>=64
?③ 退化情況1:在擴容時如果拆分樹時叠殷,樹元素個數(shù)<=6則會退化鏈表
?④ 退化情況2:remove 樹節(jié)點時改鲫,若root、root.left林束、root.right像棘、root.left.left有一個為空null,也會退化為鏈表

  • 索引如果計算壶冒?hashCode都有了缕题,為何還要提供hash()方法?數(shù)組容量為何是2的n次冪胖腾?

?① 計算對象的hashCode(),再進行調(diào)用HashMap的hash()方法進行二次哈希烟零,最后 &(capacity-1) 得到索引
?② 二次hash()是為了綜合高為數(shù)據(jù)瘪松,讓哈希分布更為均勻
?③ 計算索引時,如果是2的n次冪可以使用位與運算代替模式锨阿,效率更高宵睦;擴容時hash & oldCap == 0的元素留在原來位置,否則新位置 = 舊位置 + oldCap(舊的容量)
?④ 但 ①墅诡、②壳嚎、③都是為了配合容量為2的n次冪時的優(yōu)化手段,例如Hashtable的容量就不是2的n次冪末早,并不能說哪種設計更優(yōu)烟馅,應該是設計者綜合了各種因素,最終選擇了使用2的n次冪作為容量

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末然磷,一起剝皮案震驚了整個濱河市焙糟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌样屠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缺脉,死亡現(xiàn)場離奇詭異痪欲,居然都是意外死亡,警方通過查閱死者的電腦和手機攻礼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門业踢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人礁扮,你說我怎么就攤上這事知举。” “怎么了太伊?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵雇锡,是天一觀的道長。 經(jīng)常有香客問我僚焦,道長锰提,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任芳悲,我火速辦了婚禮立肘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘名扛。我一直安慰自己谅年,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布肮韧。 她就那樣靜靜地躺著融蹂,像睡著了一般旺订。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殿较,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天耸峭,我揣著相機與錄音,去河邊找鬼淋纲。 笑死劳闹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的洽瞬。 我是一名探鬼主播本涕,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伙窃!你這毒婦竟也來了菩颖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤为障,失蹤者是張志新(化名)和其女友劉穎晦闰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳍怨,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡呻右,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鞋喇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声滥。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖侦香,靈堂內(nèi)的尸體忽然破棺而出落塑,到底是詐尸還是另有隱情,我是刑警寧澤罐韩,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布憾赁,位于F島的核電站,受9級特大地震影響散吵,放射性物質(zhì)發(fā)生泄漏缠沈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一错蝴、第九天 我趴在偏房一處隱蔽的房頂上張望洲愤。 院中可真熱鬧,春花似錦顷锰、人聲如沸柬赐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肛宋。三九已至州藕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酝陈,已是汗流浹背床玻。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沉帮,地道東北人锈死。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像穆壕,于是被迫代替她去往敵國和親待牵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 偶然發(fā)現(xiàn)這位博主的文章很干貨喇勋,部分知識講解非常細致缨该,尤其是開講之前的準備知識很方便小白直接理解HashMap;故復...
    Divenier閱讀 373評論 0 4
  • 1.HashMap是一個數(shù)組+鏈表/紅黑樹的結(jié)構川背,數(shù)組的下標在HashMap中稱為Bucket值贰拿,每個數(shù)組項對應的...
    誰在烽煙彼岸閱讀 1,014評論 2 2
  • HashMap部分源碼 hash算法 可以看到hash算法計算分為三步 1.獲得key的hash值2.在1的基礎上...
    _code_x閱讀 213評論 0 2
  • 一、簡介 哈希表也叫散列表熄云,是一種非常重要的數(shù)據(jù)結(jié)構壮不,底層實現(xiàn)是一個 key - value 鍵值對。應用場景及其...
    進擊的程序猿呀閱讀 127評論 0 0
  • 概述 java8對java7中hashmap的實現(xiàn)進行了一部分修改皱碘,最大的修改在于利用了紅黑樹,jdk7使用數(shù)組+...
    今年五年級閱讀 303評論 0 0