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

「Java」HashMap底層實現、加載因子、容量值及死循環

開發 后端
HashMap是一個基于哈希表實現的無序的key-value容器,它鍵和值允許設置為 null,同時它是線程不安全的。

HashMap 簡介

HashMap是一個基于哈希表實現的無序的key-value容器,它鍵和值允許設置為 null,同時它是線程不安全的。

HashMap 底層實現

  •  在jdk 1.7中HashMap是以數組+鏈表的實現的
  •  在jdk1.8開始引入紅黑樹,HashMap底層變成了數組+鏈表+紅黑樹實現

紅黑樹簡介

紅黑樹是一種特殊的平衡二叉樹,它有如下的特征:

  •  節點是紅色或黑色
  •  根節點是黑色的
  •  所有葉子都是黑色。(葉子是NULL節點)
  •  每個紅色節點的兩個子節點都是黑色的(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
  •  從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

所以紅黑樹的時間復雜度為: O(lgn)。

jdk1.8:數組+鏈表+紅黑樹

HashMap的底層首先是一個數組,元素存放的數組索引值就是由該元素的哈希值(key-value中key的哈希值)確定的,這就可能產生一種特殊情況——不同的key哈希值相同。

在這樣的情況下,于是引入鏈表,如果key的哈希值相同,在數組的該索引中存放一個鏈表,這個鏈表就包含了所有key的哈希值相同的value值,這就解決了哈希沖突的問題。

但是如果發生大量哈希值相同的特殊情況,導致鏈表很長,就會嚴重影響HashMap的性能,因為鏈表的查詢效率需要遍歷所有節點。于是在jdk1.8引入了紅黑樹,當鏈表的長度大于8,且HashMap的容量大于64的時候,就會將鏈表轉化為紅黑樹。 

  1. // jdk1.8  
  2. // HashMap#putVal  
  3. // binCount 是該鏈表的長度計數器,當鏈表長度大于等于8時,執行樹化方法  
  4. // TREEIFY_THRESHOLD = 8  
  5. if (binCount >= TREEIFY_THRESHOLD - 1)  
  6.     treeifyBin(tab, hash);  
  7. // HashMap#treeifyBin      
  8. final void treeifyBin(Node<K,V>[] tab, int hash) {  
  9.     int n, index; Node<K,V> e;  
  10.     // MIN_TREEIFY_CAPACITY=64  
  11.     // 若 HashMap 的大小小于64,僅擴容,不樹化  
  12.     if (tab == null || (n = tab.length) < MIN_TREEIFY_CAPACITY 
  13.         resize();  
  14.     else if ((e = tab[index = (n - 1) & hash]) != null) {  
  15.         TreeNode<K,V> hd = nulltl = null 
  16.         do { 
  17.              TreeNode<K,V> p = replacementTreeNode(e, null);  
  18.             if (tl == null)  
  19.                 hd = p
  20.              else {  
  21.                 p.prev = tl
  22.                  tl.next = p 
  23.             }  
  24.             tl = p 
  25.         } while ((ee = e.next) != null);  
  26.         if ((tab[index] = hd) != null)  
  27.             hd.treeify(tab);  
  28.     }  

加載因子為什么是0.75

所謂的加載因子,也叫擴容因子或者負載因子,它是用來進行擴容判斷的。

假設加載因子是0.5,HashMap初始化容量是16,當HashMap中有16 * 0.5=8個元素時,HashMap就會進行擴容操作。

而HashMap中加載因子為0.75,是考慮到了性能和容量的平衡。

由加載因子的定義,可以知道它的取值范圍是(0, 1]。

  •  如果加載因子過小,那么擴容門檻低,擴容頻繁,這雖然能使元素存儲得更稀疏,有效避免了哈希沖突發生,同時操作性能較高,但是會占用更多的空間。
  •  如果加載因子過大,那么擴容門檻高,擴容不頻繁,雖然占用的空間降低了,但是這會導致元素存儲密集,發生哈希沖突的概率大大提高,從而導致存儲元素的數據結構更加復雜(用于解決哈希沖突),最終導致操作性能降低。
  •  還有一個因素是為了提升擴容效率。因為HashMap的容量(size屬性,構造函數中的initialCapacity變量)有一個要求:它一定是2的冪。所以加載因子選擇了0.75就可以保證它與容量的乘積為整數。 
  1. // 構造函數  
  2. public HashMap(int initialCapacity, float loadFactor) {  
  3.     // ……  
  4.     this.loadFactor = loadFactor;// 加載因子  
  5.     this.threshold = tableSizeFor(initialCapacity);  
  6.  
  7. /**  
  8.  * Returns a power of two size for the given target capacity.返回2的冪  
  9.  * MAXIMUM_CAPACITY = 1 << 30  
  10.  */  
  11. static final int tableSizeFor(int cap) {  
  12.     int n = cap - 1;  
  13.     n |= n >>> 1;  
  14.     n |= n >>> 2; 
  15.     n |= n >>> 4;  
  16.     n |= n >>> 8;  
  17.     n |= n >>> 16;  
  18.     return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;  

HashMap 的容量為什么是2的 n 次冪

HashMap的默認初始容量是16,而每次擴容是擴容為原來的2倍。這里的16和2倍就保證了HashMap的容量是2的n次冪,那么這樣設計的原因是什么呢?

原因一:與運算高效

與運算&,基于二進制數值,同時為1結果為1,否則就是0。如1&1=1,1&0=0,0&0=0。使用與運算的原因就是對于計算機來說,與運算十分高效。

原因二:有利于元素充分散列,減少 Hash 碰撞

在給HashMap添加元素的putVal函數中,有這樣一段代碼: 

  1. // n為容量,hash為該元素的hash值  
  2. if ((p = tab[i = (n - 1) & hash]) == null)  
  3.     tab[i] = newNode(hash, key, value, null); 

它會在添加元素時,通過i = (n - 1) & hash計算該元素在HashMap中的位置。

當 HashMap 的容量為 2 的 n 次冪時,他的二進制值是100000……(n個0),所以n-1的值就是011111……(n個1),這樣的話(n - 1) & hash的值才能夠充分散列。

舉個例子,假設容量為16,現在有哈希值為1111,1110,1011,1001四種將被添加,它們與n-1(15的二進制=01111)的哈希值分別為1111、1110、1110、1011,都不相同。

而假設容量不為2的n次冪,假設為10,那么它與上述四個哈希值進行與運算的結果分別是:0101、0100、0001、0001。

可以看到后兩個值發生了碰撞,從中可以看出,非2的n次冪會加大哈希碰撞的概率。所以 HashMap 的容量設置為2的n次冪有利于元素的充分散列。

參考:HashMap初始容量為什么是2的n次冪及擴容為什么是2倍的形式

HashMap 是如何導致死循環的

HashMap會導致死循環是在jdk1.7中,由于擴容時的操作是使用頭插法,在多線程的環境下可能產生循環鏈表,由此導致了死循環。在jdk1.8中改為使用尾插法,避免了該死循環的情況。 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2013-06-06 13:34:56

HashMap線程不安全

2020-12-17 07:39:30

HashMap死循環數據

2023-01-04 07:54:03

HashMap底層JDK

2025-01-21 00:00:00

HashMap死循環數據損壞

2020-09-29 15:24:07

面試數據結構Hashmap

2022-01-20 08:44:25

HashMap死循環開放性

2022-01-18 06:59:50

HashMap循環底層

2023-07-11 08:00:00

2023-01-31 08:24:55

HashMap死循環

2022-01-13 06:59:40

HashMap底層面試

2011-08-29 16:23:29

Lua腳本

2021-08-29 07:41:48

數據HashMap底層

2015-10-09 09:43:53

云環境CPU虛擬化底層容量

2023-10-18 10:55:55

HashMap

2020-08-19 16:36:53

HashMap紅黑樹閾值

2018-10-10 20:20:14

2011-09-07 10:13:04

IPv6IPv4

2024-12-06 16:00:00

C++頭文件

2013-06-06 13:10:44

HashMap無鎖

2025-09-03 07:18:07

點贊
收藏

51CTO技術棧公眾號

91国语精品自产拍| 日韩天堂在线| 久久精品在线观看| 欧美成人精品一区二区三区| 9久久婷婷国产综合精品性色 | 亚洲精品一区二区三区四区高清| 国产色一区二区三区| 国内精品偷拍视频| 另类天堂av| 日韩精品有码在线观看| 青娱乐自拍偷拍| 日本xxxx人| 亚洲电影在线| 亚洲国产小视频| 伊人国产在线视频| 白浆视频在线观看| 91首页免费视频| 亚洲一区二区三区乱码aⅴ| 亚洲 欧美 日韩 综合| 亚洲精品小说| 亚洲一二三在线| 一边摸一边做爽的视频17国产 | 国产日韩亚洲| 久久精品99久久久久久久久| 免费在线观看你懂的| 欧美专区一区| 欧美日韩成人在线一区| 欧美 日韩 国产一区| 青青草视频免费在线观看| 久久精品系列| 2019中文字幕在线| 91激情视频在线观看| 久久电影天堂| 色老汉一区二区三区| 秋霞无码一区二区| 高h视频在线| 26uuu色噜噜精品一区| 国产精品久久久久久久久男 | 欧美亚洲综合色| 久久久久久久久久久视频| 欧美hdxxxx| 久久亚洲欧美国产精品乐播| 国产精品国产一区二区| www.五月激情| 国产成人av一区二区三区在线| 国产精品中文字幕在线| 中文字幕+乱码+中文| 久久婷婷影院| 欧美成人精品h版在线观看| 久久久老熟女一区二区三区91| 亚洲精品视频一二三区| 色综合久久88色综合天天免费| 欧美激情视频一区二区三区| 91在线公开视频| 久久www免费人成看片高清| 欧美极品美女视频网站在线观看免费| 国产特黄级aaaaa片免| 色999韩欧美国产综合俺来也| 欧美性色欧美a在线播放| 国产精品www在线观看| jizz一区二区三区| 中文字幕在线免费不卡| 中文字幕一区二区三区精彩视频| 巨大荫蒂视频欧美另类大| 国产精品美女久久久久久久久| 亚洲三区视频| 欧美日韩国产中文字幕在线| 久久久欧美精品sm网站| 成人h视频在线观看| 成人免费视频国产| 99精品视频一区| 热re99久久精品国产99热| 国产一区二区三区福利| 国产精品美女久久久久高潮| 51xx午夜影福利| 丁香花在线高清完整版视频| 精品久久久久久中文字幕大豆网 | 免费日韩电影| 欧美性videosxxxxx| 久久久999免费视频| sm国产在线调教视频| 伊人性伊人情综合网| 在线丝袜欧美日韩制服| 亚洲奶水xxxx哺乳期| 国产精品久久久一本精品 | 国产模特精品视频久久久久| 精品中文字幕视频| 国产黄色录像片| 在线日韩欧美| 久久久久久久国产精品视频| 97久久久久久久| 99成人精品| 国产日韩欧美日韩大片| 亚洲奶汁xxxx哺乳期| 日本一区二区三区四区在线视频| 女同一区二区| 欧美日本网站| 国产亚洲精品7777| 女女同性女同一区二区三区91| 亚洲av片一区二区三区| 国产精品99久久久久久有的能看| 国产欧美韩国高清| 日韩一级片免费观看| 99精品视频一区| 亚洲成年人专区| 国产视频一区二区| 亚洲另类一区二区| 丁香色欲久久久久久综合网| 性欧美videohd高精| 日韩欧美中文一区| 国精产品一区一区| 蘑菇福利视频一区播放| 91九色偷拍| 性xxxxbbbb| 国产亚洲美州欧州综合国| 久久人妻无码一区二区| 福利一区二区免费视频| 在线电影院国产精品| 波多野结衣中文字幕在线播放| 亚洲日本中文| 精品少妇一区二区三区日产乱码 | 国产91精品在线播放| 精品人妻少妇AV无码专区| 中文在线一区二区| 永久免费在线看片视频| 国内在线视频| 日韩一区二区三区av| 美女黄色一级视频| 精品大片一区二区| 国产91|九色| 男人天堂综合网| 亚洲欧美另类小说| 97在线免费公开视频| 日本美女久久| 国产亚洲欧美一区| 久久视频免费看| 精品中文av资源站在线观看| 国产精品日韩二区| 中文在线手机av| 欧美日韩视频免费播放| 国内自拍视频网| 视频在线观看免费影院欧美meiju| 中文字幕日韩欧美| 18国产免费视频| 国产欧美日韩在线视频| 成人免费毛片播放| 亚洲高清在线一区| 欧美精品在线看| 国产成人免费看一级大黄| 亚洲欧美激情一区二区| 亚洲成人av免费观看| 嫩草一区二区三区| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产免费av一区二区| 99热在这里有精品免费| 米仓穗香在线观看| 成人1区2区| 日韩中文字幕av| 国产一区二区三区黄片| 国产亚洲va综合人人澡精品| 91视频免费版污| 日韩免费看片| 日韩免费观看在线观看| 国产福利小视频在线观看| 欧美无砖砖区免费| 日韩成人毛片视频| 99在线精品一区二区三区| 欧美牲交a欧美牲交aⅴ免费真| 精品视频国产| 成人xxxx视频| 成年网站在线| 制服丝袜中文字幕一区| 久久亚洲精品大全| 久久久亚洲高清| 91国产精品视频在线观看| 午夜国产一区二区| 国产日韩欧美一区二区| 色黄网站在线观看| 欧美精品丝袜久久久中文字幕| 久久av无码精品人妻系列试探| 全国精品久久少妇| 午夜啪啪福利视频| 日韩欧美天堂| 成人精品视频99在线观看免费| 不卡在线视频| 日韩视频在线你懂得| 国产精品男女视频| 亚洲欧美在线视频观看| xxxx黄色片| 日韩亚洲国产精品| 亚洲精品自在在线观看| 欧美三级精品| 欧美高清在线视频观看不卡| www.蜜臀av.com| 亚洲精品国产精华液| 香蕉视频xxxx| 久久xxxx| av日韩在线看| 成人在线视频免费观看| 国产精品一区二区三区在线观| 免费在线中文字幕| 日韩视频国产视频| 18精品爽视频在线观看| 国产欧美中文在线| 在线观看日本一区二区| 欧美成人自拍| 成人在线中文字幕| 在线中文字幕-区二区三区四区| 日韩视频123| 黄色一级视频免费看| 一区二区三区免费网站| 久久婷婷五月综合| proumb性欧美在线观看| 91日韩精品视频| 欧美日韩国产亚洲一区| 五月天亚洲综合情| 一区三区在线欧| 国产精品亚洲аv天堂网| а天堂中文在线官网| 国产午夜精品一区二区三区| 五月婷婷六月丁香| 亚洲精品一区二区三区影院| 国产av一区二区三区精品| 亚洲成av人影院在线观看网| 中文字幕高清视频| 黄页网站大全一区二区| 国产性生活免费视频| 日韩av片子| 日本不卡在线观看| 999精品嫩草久久久久久99| 欧美激情第三页| 撸视在线观看免费视频| 制服视频三区第一页精品| 综合久久中文字幕| 在线观看av一区二区| caoporn国产| 亚洲精品高清在线| 国产精品成人69xxx免费视频| 成人高清伦理免费影院在线观看| 一区二区三区国产好的精华液| 蜜桃视频在线观看一区| 欧美三级理论片| 激情欧美日韩一区| 亚洲国产欧洲综合997久久 | 亚洲欧洲在线视频| 91片黄在线观看喷潮| 亚洲电影在线免费观看| 青青草福利视频| 久久久久一区二区三区四区| 超碰97人人干| 国产欧美中文在线| 一起草在线视频| 久久―日本道色综合久久 | 亚洲免费av高清| 欧美人妻一区二区| 艳妇臀荡乳欲伦亚洲一区| 一区二区精品免费| 国产欧美精品国产国产专区| 国产精品手机在线观看| 暴力调教一区二区三区| 丰满少妇在线观看资源站| 久久久另类综合| 国产精品无码一区二区三| 久久亚洲精品小早川怜子| 少妇无套高潮一二三区| 中文字幕亚洲精品在线观看| 国产成人精品无码免费看夜聊软件| 久久精品一区二区三区不卡牛牛| 日本xxxx免费| av在线播放一区二区三区| 精品夜夜澡人妻无码av| 国产欧美va欧美不卡在线| 欧美一区二区三区观看| 欧美激情综合在线| 成人h动漫精品一区| 欧美国产乱子伦| 国产天堂av在线| 国产精品传媒视频| av永久免费观看| 久久亚洲一级片| frxxee中国xxx麻豆hd| 亚洲综合999| 国产高潮国产高潮久久久91| 亚洲成a人片综合在线| 99久久久无码国产精品免费蜜柚 | 韩国av中国字幕| 国产一区二区精品久久91| 麻豆精品国产传媒av| 日本一区二区三区视频视频| 国内偷拍精品视频| 色域天天综合网| 精品免费久久久| 中文字幕不卡av| xxx在线免费观看| 久久久久久久久久久网站| 日本免费一区二区三区四区| 日韩免费在线播放| 日韩精品一区二区三区免费视频| 亚洲一区中文字幕| 最新精品国偷自产在线| 乱一区二区三区在线播放| 99久久夜色精品国产亚洲1000部| 亚洲精品不卡| 国产日韩1区| 亚洲热在线视频| 国产精品日产欧美久久久久| 日韩美女一级片| 精品欧美国产一区二区三区| 97在线公开视频| 欧美v国产在线一区二区三区| 成人av一区| **欧美日韩vr在线| 亚洲精品粉嫩美女一区| 国产成人精品日本亚洲11| 日韩欧美网址| 成年丰满熟妇午夜免费视频 | 欧美1区2区| 成人精品视频在线播放| 国产一区二区在线观看免费| 黑森林av导航| 亚洲人成网站在线| 亚洲一级av毛片| 国产一区二区三区久久精品| 三妻四妾的电影电视剧在线观看| 国产精品久久久久久久久久久久久久 | 欧美影院一区| www.精品在线| 国产午夜亚洲精品午夜鲁丝片| 中文国语毛片高清视频| 一区二区三区四区精品在线视频| 中文在线观看av| 日韩精品一区二区三区中文精品| 日本电影在线观看网站| 国产精品久久久久久久电影| 精品视频亚洲| 久久久精品麻豆| 日本一区二区三区四区在线视频| 强行糟蹋人妻hd中文| 在线电影院国产精品| 黄视频网站在线| 日本国产一区二区三区| 免费观看成人www动漫视频| 亚洲一区二区高清视频| 91久久夜色精品国产九色| 亚洲综合色在线观看| 国产精品美女久久久久久| 91av在线免费视频| 亚洲精品国产综合区久久久久久久| 免费在线午夜视频| 韩国福利视频一区| 少妇一区二区三区| 伊人再见免费在线观看高清版| 国产iv一区二区三区| 国产精品99无码一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 小小影院久久| 91国视频在线| 久久精品人人做人人爽97| а中文在线天堂| 色妞欧美日韩在线| 厕沟全景美女厕沟精品| 欧美日韩一区综合| 美国三级日本三级久久99| 最近日本中文字幕| 色偷偷久久人人79超碰人人澡| 精品人妻一区二区三区含羞草| 欧美黑人又粗大| 国产精品成人**免费视频| 亚洲国产一区二区三区在线播| 另类小说综合欧美亚洲| 九九久久免费视频| 欧美一区二区精品| 午夜老司机在线观看| 2019中文字幕全在线观看| 禁果av一区二区三区| 午夜视频在线观| 亚洲欧美影音先锋| 伊人久久国产精品| 欧美成人黑人xx视频免费观看| 欧美理论电影在线精品| 亚洲熟妇无码一区二区三区导航| 国产一区二区看久久| 久久久久久久久影院| 色青青草原桃花久久综合| 福利视频亚洲| 给我免费播放片在线观看| 成人黄色一级视频| 国产女优在线播放| 久久久欧美精品| 日韩精品欧美| 好男人香蕉影院| 亚洲图片自拍偷拍| av在线电影观看| 国产精品亚洲视频在线观看| 日韩欧美高清| 色综合久久五月| 欧美色xxxx| 污污的视频在线观看| 特级西西444www大精品视频| 成人激情小说网站|