面試題 HashMap的載入因子

2021-10-19 06:56:03 字數 1060 閱讀 5340

說明:

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是最佳方案。

面試題 HashMap詳解

先上hashcode和equals原始碼 jni,呼叫底層其它語言實現 public native inthashcode 預設同 直接比較物件 public boolean equals object obj equals方法 string類中重寫了equals方法,比較的是字串值,看一下原始碼實...

HashMap常見的面試題

1.hashmap底層是如何實現的?首先底層資料結構是由陣列 鍊錶組成鍊錶雜湊。hashmap先得到key的雜湊值,在通過擾動函式 減少碰撞次數 得到hash值,接著通過hash n 1 n位table的長度,運算後得到陣列的索引值。如果當前節點存在元素,則通過比較hash值和key值是否相等,相等...

HashMap常見面試題

1.你知道hashmap的工作原理嗎?你知道hashmap的get 方法的工作原理嗎?hashmap基於hashing原理,我們通過put 和get 方法儲存和獲取物件。當我們將鍵值對傳遞給put 方法時,它呼叫鍵物件的hashcode 方法來計算hashcode,讓後找到bucket位置來儲存en...