精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試突擊:說一下HashMap底層實現?及元素添加流程?

開發 前端
HashMap 是使用頻率最高的數據類型之一,同時也是面試必問的問題之一,尤其是它的底層實現原理,既是常見的面試題又是理解 HashMap 的基石,所以重要程度不言而喻。

HashMap 是使用頻率最高的數據類型之一,同時也是面試必問的問題之一,尤其是它的底層實現原理,既是常見的面試題又是理解 HashMap 的基石,所以重要程度不言而喻。

HashMap 底層實現

HashMap 在 JDK 1.7 和 JDK 1.8 的底層實現是不一樣的,在 JDK 1.7 中,HashMap 使用的是數組 + 鏈表實現的,而 JDK 1.8 中使用的是數組 + 鏈表或紅黑樹實現的。HashMap 在 JDK 1.7 中的實現如下圖所示:

HashMap 在 JDK 1.8 中的實現如下圖所示:

我們本文重點來學習主流版本 JDK 1.8 中的 HashMap。HashMap 中每個元素稱之為一個哈希桶(bucket),哈希桶包含的內容有 4 個:

  • hash 值
  • key
  • value
  • next(下一個節點)

HashMap 插入流程

HashMap 元素新增的實現源碼如下(下文源碼都是基于主流版本 JDK 1.8):

  1. public V put(K key, V value) { 
  2.     // 對 key 進行哈希操作 
  3.     return putVal(hash(key), key, value, falsetrue); 
  4. final V putVal(int hash, K key, V value, boolean onlyIfAbsent, 
  5.                boolean evict) { 
  6.     Node<K,V>[] tab; Node<K,V> p; int n, i; 
  7.     // 哈希表為空則創建表 
  8.     if ((tab = table) == null || (n = tab.length) == 0) 
  9.         n = (tab = resize()).length; 
  10.     // 根據 key 的哈希值計算出要插入的數組索引 i 
  11.     if ((p = tab[i = (n - 1) & hash]) == null
  12.         // 如果 table[i] 等于 null,則直接插入 
  13.         tab[i] = newNode(hash, key, value, null); 
  14.     else { 
  15.         Node<K,V> e; K k; 
  16.         // 如果 key 已經存在了,直接覆蓋 value 
  17.         if (p.hash == hash && 
  18.             ((k = p.key) == key || (key != null && key.equals(k)))) 
  19.             e = p; 
  20.         // 如果 key 不存在,判斷是否為紅黑樹 
  21.         else if (p instanceof TreeNode) 
  22.             // 紅黑樹直接插入鍵值對 
  23.             e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value); 
  24.         else { 
  25.             // 為鏈表結構,循環準備插入 
  26.             for (int binCount = 0; ; ++binCount) { 
  27.                 // 下一個元素為空時 
  28.                 if ((e = p.next) == null) { 
  29.                     p.next = newNode(hash, key, value, null); 
  30.                     // 轉換為紅黑樹進行處理 
  31.                     if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st 
  32.                         treeifyBin(tab, hash); 
  33.                     break; 
  34.                 } 
  35.                 //  key 已經存在直接覆蓋 value 
  36.                 if (e.hash == hash && 
  37.                     ((k = e.key) == key || (key != null && key.equals(k)))) 
  38.                     break; 
  39.                 p = e; 
  40.             } 
  41.         } 
  42.         if (e != null) { // existing mapping for key 
  43.             V oldValue = e.value; 
  44.             if (!onlyIfAbsent || oldValue == null
  45.                 e.value = value; 
  46.             afterNodeAccess(e); 
  47.             return oldValue; 
  48.         } 
  49.     } 
  50.     ++modCount; 
  51.     // 超過最大容量,擴容 
  52.     if (++size > threshold) 
  53.         resize(); 
  54.     afterNodeInsertion(evict); 
  55.     return null

上述的源碼都添加了相應的代碼注釋,簡單來說 HashMap 的元素添加流程是,先將 key 值進行 hash 得到哈希值,根據哈希值得到元素位置,判斷元素位置是否為空,如果為空直接插入,不為空判斷是否為紅黑樹,如果是紅黑樹則直接插入,否則判斷鏈表是否大于 8,且數組長度大于 64,如果滿足這兩個條件則把鏈表轉成紅黑樹,然后插入元素,如果不滿足這兩個條件中的任意一個,則遍歷鏈表進行插入,它的執行流程如下圖所示:

為什么要將鏈表轉紅黑樹?

JDK 1.8 中引入了新的數據結構紅黑樹來實現 HashMap,主要是出于性能的考量。因為鏈表超過一定長度之后查詢效率就會很低,它的時間復雜度是 O(n),而紅黑樹的時間復雜度是 O(logn),因此引入紅黑樹可以加快 HashMap 在數據量比較大的情況下的查詢效率。

哈希算法實現

HashMap 的哈希算法實現源碼如下:

  1. static final int hash(Object key) { 
  2.     int h; 
  3.     return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); 

其中,key.hashCode() 是 Java 中自帶的 hashCode() 方法,返回一個 int 類型的散列值,后面 hashCode 再右移 16 位,正好是 32bit 的一半,與自己本身做異或操作(相同為 0,不同為 1),主要是為了混合哈希值的高位和低位,增加低位的隨機性,這樣就實現了 HashMap 的哈希算法。

總結

HashMap 在 JDK 1.7 時,使用的是數組 + 鏈表實現的,而在 JDK 1.8 時,使用的是數組 + 鏈表或紅黑樹的方式來實現的,JDK 1.8 之所以引入紅黑樹主要是出于性能方面的考慮。HashMap 在插入時,會判斷當前鏈表的長度是否大于 8 且數組的長度大于 64,如果滿足這兩個條件就會把鏈表轉成紅黑樹再進行插入,否則就是遍歷鏈表插入。

參考文檔:https://tech.meituan.com/2016/06/24/java-hashmap.html

本文轉載自微信公眾號「Java面試真題解析」,可以通過以下二維碼關注。轉載本文請聯系Java面試真題解析公眾號。

 

責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2022-06-29 11:01:05

MySQL事務隔離級別

2022-09-27 21:14:54

Spring事務傳播機制

2022-09-05 07:06:59

BeanSpring

2022-05-18 07:43:09

Exchange交換器JUC

2023-02-06 07:01:51

2022-02-17 08:02:08

線程Java生命周期

2022-03-09 07:35:24

線程池線程參數

2022-07-20 07:29:55

TCPIP協議

2023-11-29 08:00:53

JavaTreeMap底層

2022-04-13 14:43:05

JVM同步鎖Monitor 監視

2024-02-27 15:23:48

RedLock算法Redis

2023-09-12 14:56:13

MyBatis緩存機制

2024-01-29 10:08:11

零拷貝Zero-copyCPU 拷貝

2025-03-10 07:05:07

2021-07-28 10:08:19

類加載代碼塊面試

2023-02-02 07:06:10

2022-06-07 12:03:33

Java內存模型

2022-06-06 15:33:20

線程Java釋放鎖

2023-02-08 08:32:41

輪詢鎖

2023-02-18 13:34:14

Nacos健康檢查機制
點贊
收藏

51CTO技術棧公眾號

老司机精品视频网站| 久久人人视频| 久久久久久久精| 国产精品高精视频免费| 成人免费精品动漫网站| 51亚洲精品| 色综合久久久网| 日本黄色a视频| 少妇高潮一区二区三区69| 国产黄色免费观看| 樱花草涩涩www在线播放| 国产亚洲自拍一区| 成人做爰66片免费看网站| 男人日女人网站| 欧美福利专区| 夜夜嗨av色综合久久久综合网| 国内精品国产三级国产aⅴ久| 日韩在线伦理| 亚洲免费电影在线| 日本黑人久久| 秋霞网一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美激情一二三| 在线观看日本黄色| 一区二区三区视频免费观看| 欧美一区二区精品| av网站在线不卡| 136福利第一导航国产在线| 中文一区二区完整视频在线观看| 国内成+人亚洲| 精品国产va久久久久久久| 秋霞av亚洲一区二区三| 57pao精品| 国产精选第一页| 久久久久国产精品无码免费看| 欧美片第一页| 午夜精品久久一牛影视| 国产免费xxx| 伊人免费在线| 国产精品天干天干在观线| 久久亚洲国产精品日日av夜夜| 草草视频在线播放| 国产一区美女在线| 国产精品日韩欧美综合| www.国产毛片| 久热国产精品| 国产99久久精品一区二区永久免费| 日本视频免费在线| 亚洲网址在线| 海角国产乱辈乱精品视频| 国产一二三四区| 国产精品毛片久久| 久久九九全国免费精品观看| 91制片厂在线| 亚欧美无遮挡hd高清在线视频| 中文字幕在线视频日韩| 国产一二三四视频| 日韩一区二区在线免费| 在线免费看av不卡| 美日韩精品免费观看视频| 亚洲电影一二三区| 99精品老司机免费视频| 国产精品婷婷午夜在线观看| 五月天色一区| 日本亚洲精品| 亚洲欧美日韩国产一区二区三区| 91嫩草国产丨精品入口麻豆| gogo在线高清视频| 亚洲国产一区二区视频| 日韩小视频在线播放| 国产伦久视频在线观看| 欧美午夜女人视频在线| 粗暴91大变态调教| 免费污视频在线一区| 欧美色手机在线观看| 99九九99九九九99九他书对| 亚洲伊人伊成久久人综合网| 日韩一区二区在线看| 国产a√精品区二区三区四区| 国产精品自在| 亚洲欧美激情在线视频| 国产无遮挡在线观看| 午夜久久免费观看| 欧美激情国产精品| 中文字幕一区在线播放| 久草视频精品在线| 午夜激情一区| 97视频在线观看免费高清完整版在线观看| 久草手机在线观看| 美洲天堂一区二卡三卡四卡视频| 亚洲一区二区少妇| 天堂在线资源网| 国产精品拍天天在线| 日日噜噜噜夜夜爽爽| 精品人人视频| 欧美日韩免费在线视频| 在线免费看黄色片| 清纯唯美日韩| 性欧美激情精品| 中文字幕无线码一区| 成人美女在线观看| 亚洲mv在线看| 黄页网站大全在线免费观看| 欧美在线看片a免费观看| 伦伦影院午夜理论片| 岳的好大精品一区二区三区| 久久精品国产成人| 一级做a爰片久久毛片| 狠狠久久亚洲欧美| 免费国产一区| 福利成人导航| 蘑菇福利视频一区播放| 不卡av免费在线观看| 国产精品一区二区三区不卡 | 欧美一区二区三区人| 免费看黄色aaaaaa 片| 久久久久国产| 国产成人黄色av| 老牛影视av牛牛影视av| 亚洲啪啪综合av一区二区三区| 黄色一级视频片| 日韩欧美久久| 久久精品在线视频| 精品成人无码久久久久久| www.亚洲在线| 91免费国产精品| 99久久99九九99九九九| 一本大道亚洲视频| 日本中文字幕第一页| 成人性生交大片免费看视频在线 | 欧美日韩国产欧| 国产精品网红福利| 九色网友自拍视频手机在线| 亚洲成人免费影院| 国产成人av免费观看| 97超碰免费在线| 日韩系列欧美系列| 韩国国内大量揄拍精品视频| 亚洲AV无码精品自拍| 亚洲色图在线看| 久久久久久久久久一区| 日本欧美视频| 国产精品青青在线观看爽香蕉| 神马亚洲视频| 狠狠躁夜夜躁人人爽天天天天97| 四季av综合网站| 亚洲激情不卡| 精品欧美日韩在线| 韩日毛片在线观看| 日韩成人小视频| 日韩不卡视频在线| 91女神在线视频| 日韩a在线播放| 自拍偷拍精品| 国产精品精品一区二区三区午夜版| 国产精品国产高清国产| 狠狠爱在线视频一区| 国产美女喷水视频| 首页综合国产亚洲丝袜| 日韩欧美精品在线不卡| 97欧美成人| www亚洲欧美| 亚洲精品久久久久久动漫器材一区| 亚洲美女免费在线| 亚洲视频欧洲视频| 一级片黄色免费| 亚洲激情中文在线| 成人区精品一区二区| 丁香花视频在线观看| 日韩av中文字幕在线免费观看| 可以在线观看av的网站| 久久婷婷国产综合精品青草| 亚洲成人福利在线观看| 91精品久久久久久久蜜月| av一区二区三区免费| 白浆在线视频| 一区二区国产精品视频| 91亚洲国产成人久久精品麻豆| 一区二区三区丝袜| 香蕉视频黄色在线观看| 美国av一区二区| 久久久国内精品| 日韩精选在线| 成人欧美一区二区三区在线湿哒哒 | 久久精品国产成人一区二区三区| 国产精品精品国产| 亚洲夜夜综合| 亚洲日本中文字幕| 99er热精品视频| 欧美日韩一区二区三区在线免费观看| 精品手机在线视频| 福利一区福利二区| 91av在线国产| 日本精品一二三区| 好看的日韩av电影| 日本精品一区| 成人精品动漫一区二区三区| 国产精品爽黄69| 色网在线免费观看| 久久综合久久88| 国产视频在线看| 亚洲精品一区二区三区影院| 一级特黄色大片| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲av成人无码久久精品老人| 欧亚洲嫩模精品一区三区| 久草视频在线资源站| 中文字幕精品综合| 久久精品女同亚洲女同13| 精品一区二区免费视频| 久久久久久久久久久久久国产精品| 久久久久久久久99精品大| 免费看污久久久| 国产精品色在线网站| 成人黄色片网站| 欧美与亚洲与日本直播| 97色在线播放视频| 午夜小视频福利在线观看| 中文字幕免费国产精品| 免费在线国产| 亚洲加勒比久久88色综合| 国产视频第二页| 亚洲+变态+欧美+另类+精品| 久久电影一区二区| yiren22综合网成人| 国产丝袜一区二区三区免费视频| 精品黑人一区二区三区在线观看| 欧美色网一区二区| 国产熟妇一区二区三区四区| 偷窥少妇高潮呻吟av久久免费| 国产精品久久久久久久精| 国产精品久久久一本精品 | 国产又黄又大又爽| 91精品办公室少妇高潮对白| 亚洲男人的天堂在线视频| 一区二区成人在线观看| 日韩va亚洲va欧美va清高| 国产精品久久久久久久久快鸭| 国产真实乱人偷精品人妻| 91色porny在线视频| 欧美做受喷浆在线观看| 成人aa视频在线观看| www.美色吧.com| 成人精品免费看| 国产精品日日摸夜夜爽| 成人午夜在线视频| 国产性猛交96| 成人午夜精品在线| 在线黄色免费网站| 99国产欧美另类久久久精品| 国产精品300页| 久久综合九色欧美综合狠狠| 能免费看av的网站| 亚洲国产欧美日韩在线观看第一区| 亚洲国产视频一区| 日韩精品一区二区三区在线视频| 国产精品国产三级国产| 91麻豆精品久久毛片一级| 亚洲色大成网站www久久九九| 无码人妻精品中文字幕| 一区二区免费在线播放| 日韩成人免费在线视频| 岛国av在线不卡| 国内av在线播放| 欧美人牲a欧美精品| 99在线精品视频免费观看软件 | 蜜桃av噜噜一区二区三区麻豆| 亚洲第一精品电影| 久久天堂电影| 久久五月天综合| av人人综合网| 国产精品高清免费在线观看| 激情不卡一区二区三区视频在线| 成人欧美一区二区三区视频| 日韩欧美在线精品| 翔田千里亚洲一二三区| 亚洲色图二区| 国产精品无码人妻一区二区在线| 视频一区中文字幕| 天天操夜夜操很很操| 99热在这里有精品免费| xxxxx99| 亚洲伊人伊色伊影伊综合网| 美日韩一二三区| 在线播放日韩导航| 色欲久久久天天天综合网 | 亚洲国产美女精品久久久久∴| 91丝袜超薄交口足| 久久国产视频网| 国产性猛交96| 日本一区二区三区在线不卡| 久久精品www| 欧美系列亚洲系列| 亚洲大尺度网站| 一本一本久久a久久精品牛牛影视| 成人看av片| 国产精品aaaa| 白嫩白嫩国产精品| 亚洲图片小说在线| 亚洲激情另类| 91日韩精品视频| 久久久欧美精品sm网站| 久久久99精品| 欧美三区免费完整视频在线观看| 亚洲精品久久久久久久久久久久久久 | 日本国产一级片| 91在线视频网址| 久久爱一区二区| 伊人久久影院| 国产精品美女视频| 国产亚洲色婷婷久久99精品| 欧美中文字幕不卡| 五月天丁香视频| 久久九九亚洲综合| 韩国久久久久久| 国产精品区一区| 亚洲视频电影在线| 成人欧美在线视频| 91久久精品国产91性色69| 精品国产制服丝袜高跟| 嫩草在线视频| 国产精品电影在线观看| 久久久久久毛片免费看| 91大学生片黄在线观看| 老汉av免费一区二区三区| xxx在线播放| 亚洲成人免费视频| 精品人妻少妇AV无码专区| 日韩视频免费在线观看| jizz久久久久久| 欧美亚洲另类在线一区二区三区| 亚洲大片av| 亚洲一区和二区| 一区二区三区av电影| 91亚洲精品国偷拍自产在线观看| 一区二区三区 在线观看视| 波多野结衣亚洲一二三| 久久精品国产理论片免费| 影音先锋一区| 国产一级免费片| 亚欧色一区w666天堂| 亚洲精品综合网| 久久久免费电影| 亚洲超碰在线观看| 欧美人成在线观看| 高清成人免费视频| 欧美成人aaaaⅴ片在线看| 精品日韩在线观看| 爱看av在线入口| 精品无人区一区二区三区竹菊| 国产视频一区免费看| 双性尿奴穿贞c带憋尿| 欧美视频二区36p| 精品亚洲综合| 国产精品一区二区久久国产| 色综合天天爱| 亚洲综合伊人久久| 国产最新精品| 国内精品美女av在线播放| 久久野战av| 一本一道久久a久久精品综合| 老司机精品视频导航| 国产探花在线播放| 欧美xfplay| 麻豆国产在线| 日韩福利二区| 韩国欧美国产一区| 国产精品第九页| 精品视频在线播放免| 成人做爰免费视频免费看| 在线视频91| 成人美女在线视频| 中文字幕日韩免费| 久久久精品视频成人| 99a精品视频在线观看| 欧美亚洲另类色图| 国产精品理论片在线观看| www.97av.com| 欧美亚洲国产精品| 91精品国产91久久综合| 日本国产在线视频| 91搞黄在线观看| 91精品久久久| 欧美伦理一区二区| 狠狠色丁香久久婷婷综合丁香| 四虎免费在线视频| 精品调教chinesegay| 亚洲91在线| 亚洲不卡中文字幕无码| 国产精品视频在线看| 亚洲成人777777| 国产精品久久电影观看| 欧美91大片| 色欲AV无码精品一区二区久久| 制服丝袜在线91| 欧美成人精品一区二区男人小说| 2025韩国大尺度电影| 久久久久高清精品| 亚洲精品国产片| 国产精品天天狠天天看|