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