日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

hashmap应用场景_Java初学者进阶系列:HashMap的容量与性能

發布時間:2025/3/19 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hashmap应用场景_Java初学者进阶系列:HashMap的容量与性能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. HashMap的容量與性能

HashMap的性能受到兩個參數的影響:初始化容量和負載因子,下面來詳細講述這幾個關鍵問題。

1.1 Initial Capacity與Load Factor

  • Initial Capacity:初始化容量,它表示HashMap底層的那個數組,也就是Entry數組有多長,這個值默認是16。
  • Load Factor:負載因子,它表示HashMap的負載程度,換句話說,它表示HashMap到底有多滿了,是不是需要擴容了,這個值默認是0.75f。

初始化容量和負載因子的默認值是Java官方經過實踐和優化得到的數據,可以適應大多數的場景。

當然也可以不使用其默認值,可以在構造的時候,自定義HashMap的容量和負載因子:

//單純指定容量 Map<String,String> hashMapWithCapacity=new HashMap<>(64); //自定義容量和負載因子 Map<String,String> hashMapWithCapacityAndLF=new HashMap<>(64, 0.9f);

一旦需要自定義容量和負載因子,我們需要搞清楚,他們到底是什么,用來干嘛,會對性能造成什么影響。

一句話:這兩個數值會影響到HashMap的擴容,而擴容是一個對性能影響非常大的操作。

1.2 HashMap的擴容

1.2.1 擴容是什么

HashMap的擴容:HashMap被初始化之后,其容量是有限的(可以是默認,也可以是自定義的),當元素不斷被插入,是HashMap達到一定的程度(負載因子決定),這個時候,HashMap就會擴容。

根據源碼,使用公式表示,是否擴容由容量和負載因子的乘積決定!!!!

觸發擴容的條件: HashMap.Size >= Capacity * LoadFactor
  • HashMap.Size:當前HashMap的實際元素個數
  • Capacity:容量
  • LoadFactor:負載因子

如果在默認值的條件下:

HashMap.Size = 16 * 0.75 = 12

也就是,默認的情況下,插入十二個元素的時候,就會觸發擴容。

1.2.2 擴容的步驟

一旦HashMap的size超過了Capacity * LoadFactor乘積,就會觸發擴容,那如何擴容呢?,需要經過兩步:

  • resize:即:創建一個new Entry數組,長度是原來old Entry的2倍。
  • rehash:遍歷old Entry數組,把里面的每一個元素取出來重新計算hash和index。為什么要重新計算呢?想一想之前的index計算公式:
index = hash值 & (length - 1)

對,因為長度已經改了,所以index肯定會不一樣,舉個例子:

  • 當原數組長度為16時,Hash運算是和1111做與運算;
  • 新數組長度為32,Hash運算是和11111做與運算。

Hash結果顯然不同。

1.3 容量與性能(常見問題)

綜上所述,不同的容量和負載因子的設置,會導致hashmap的擴容頻率不一致。所以:

  • Initial Capacity設置得低,存儲空間少,但是增加了rehash的頻率。所以如果能夠預期到會存儲比較多的數據,那么這個值應該設置高一點
  • Initial Capacity設置得高,存儲空間多,rehash頻率少。但是會增加迭代的成本。

所以總結一個場景

  • Initial Capacity設置高:大量存儲,少量迭代
  • Initial Capacity設置低:數據少,迭代頻繁

常見問題:

  • 如何擴容的
  • 初始化容量是多少,如何設置,有什么應用場景
  • 負載因子的作用是什么

歡迎大家一起交流!

總結

以上是生活随笔為你收集整理的hashmap应用场景_Java初学者进阶系列:HashMap的容量与性能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。