大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 HashMap之擴容機制

HashMap之擴容機制

更新時間:2021-07-12 17:01:32 來源:動力節點 瀏覽1816次

首先要了解HashMap的擴容過程,我們就得了解一些HashMap中的變量:

Node<K,V>:鏈表節點,包含了key、value、hash、next指針四個元素
table:Node<K,V>類型的數組,里面的元素是鏈表,用于存放HashMap元素的實體
size:記錄了放入HashMap的元素個數
loadFactor:負載因子
threshold:擴容的閾值,決定了HashMap何時擴容,以及擴容后的大小,一般等于,等于 table * loadFactor

何時進行擴容?

HashMap使用的是懶加載,構造完HashMap對象后,只要不進行put方法插入元素之前,HashMap并不會去初始化或者擴容table。

當首次調用put方法時,HashMap會發現table為空然后調用resize方法進行初始化,當添加完元素后,如果HashMap發現size(元素總數)大于threshold(閾值),則會調用resize方法進行擴容

擴容過程:

  • 若threshold(閾值)不為空,table的首次初始化大小為閾值,否則初始化為缺省值大小16

  • 默認的負載因子大小為0.75,當一個map填滿了75%的bucket時候,就會擴容,擴容后的table大小變為原來的兩倍
  • 擴容因子=0.75。當使用量接近數組容量的75%的時候,數組中還有25%的剩余空間。碰撞的概率越大,put的元素就越多,平均到每個桶中的元素的數量也越多。一旦發生碰撞,需要付出更大的代價。所以,如果擴容因子越大,碰撞的概率也就越大,發生碰撞后的代價也更大,結果導致效率大打折扣。因此擴容因子=0.75也是一個空間換時間的考慮,0.75這個數值應該是經過充分的考慮決定的。
  • 假設擴容前的table大小為2的N次方,有上述put方法解析可知,元素的table索引為其hash值的后N位確定
  • 擴容后的table大小即為2的N+1次方,則其中元素的table索引為其hash值的后N+1位確定,比原來多了一位
  • 重新調整map的大小,并將原來的對象放入新的bucket數組中。這個過程叫作rehashing

因此,table中的元素只有兩種情況:

元素hash值第N+1位為0:不需要進行位置調整

元素hash值第N+1位為1:調整至原索引的兩倍位置

擴容或初始化完成后,resize方法返回新的table

以上就是動力節點小編介紹的"HashMap之擴容機制",希望對大家有幫助,想了解更多可查看Java基礎教程,如有疑問,請在線咨詢,有專業老師隨時為您服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 色婷婷综合在线视频最新 | 国产精品久久久久久免费播放 | 久久久久亚洲精品美女 | 日产国语一区二区三区在线看 | 国产精品在线 | 欧美日韩看片 | 国产成人久久久精品毛片 | 牛人盗摄一区二区三区视频 | 久久99热这里只有精品免费看 | 国产精品久久久视频 | 日韩精品久久久毛片一区二区 | 国产精品一区高清在线观看 | 国产精品情侣久久婷婷文字 | 亚洲欧美日韩另类 | 伊人久久中文 | 国产精久久一区二区三区 | 国内第一永久免费福利视频 | 91福利刘玥国产在线观看 | 最新午夜韩国理论片77网 | 国产精品自在欧美一区 | 四虎影在永久在线观看 | 久久一本热 | 欧美国产亚洲一区二区三区 | 美女黄色免费在线观看 | 一区二区三区高清 | 99久久99久久精品免费看子 | 久久不卡 | 久久综合给会久久狠狠狠 | 热久久99影院 | 亚洲成色999久久网站 | 国产一级αv片免费观看 | 欧美精品在欧美一区二区 | 99爱视频在线观看 | 久久ww| 羞羞网站在线看 | 国产成人综合网亚洲欧美在线 | 欧美激情区 | 久久99亚洲精品久久频 | 亚洲欧美另类国产 | 九九精品久久 | 青青草a免费线观a |