面试题:HashMap的加载因子
說明:
1.loadFactor加載因子,是用來衡量 HashMap 滿的程度,表示HashMap的疏密程度,影響hash操作到同一個數組位置的概率,計算HashMap的實時加載因子的方法為:size/capacity,而不是占用桶的數量去除以capacity。capacity 是桶的數量,也就是 table 的長度length。
loadFactor太大導致查找元素效率低,太小導致數組的利用率低,存放的數據會很分散。loadFactor的默認值為0.75f是官方給出的一個比較好的臨界值。
當HashMap里面容納的元素已經達到HashMap數組長度的75%時,表示HashMap太擠了,需要擴容,而擴容這個過程涉及到 rehash、復制數據等操作,非常消耗性能。,所以開發中盡量減少擴容的次數,可以通過創建HashMap集合對象時指定初始容量來盡量避免。
同時在HashMap的構造器中可以定制loadFactor。
構造方法:
HashMap(int initialCapacity, float loadFactor) 構造一個帶指定初始容量和加載因子的空 HashMap。
2.為什么加載因子設置為0.75,初始化臨界值是12?
loadFactor越趨近于1,那么 數組中存放的數據(entry)也就越多,也就越密,也就是會讓鏈表的長度增加,loadFactor越小,也就是趨近于0,數組中存放的數據(entry)也就越少,也就越稀疏。
如果希望鏈表盡可能少些。要提前擴容,有的數組空間有可能一直沒有存儲數據。加載因子盡可能小一些。
舉例:
例如:加載因子是0.4。 那么16*0.4--->6 如果數組中滿6個空間就擴容會造成數組利用率太低了。
加載因子是0.9。 那么16*0.9---->14 那么這樣就會導致鏈表有點多了。導致查找元素效率低。
所以既兼顧數組利用率又考慮鏈表不要太多,經過大量測試0.75是最佳方案。
threshold計算公式:capacity(數組長度默認16) * loadFactor(負載因子默認0.75)。這個值是當前已占用數組長度的最大值。當Size>=threshold的時候,那么就要考慮對數組的resize(擴容),也就是說,這個的意思就是 衡量數組是否需要擴增的一個標準。 擴容后的 HashMap 容量是之前容量的兩倍.
總結
以上是生活随笔為你收集整理的面试题:HashMap的加载因子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html页面和Chrome开发者工具el
- 下一篇: 你不对劲猫动态表情包