HashMap原始碼解讀

2021-09-11 18:21:39 字數 524 閱讀 3257

今日閒來無事,擷取一段hashmap的**分析一下

int hash = hash(key);              -----------根據key 的hashcode 計算hash值

int i = indexfor(hash, table.length); ----------根據hash值 ,計算出再陣列中的位置

for (entrye = table[i]; e != null; e = e.next) }

通過以上**的分析,說明,hashcode 相同,則兩個物件的不一定相同,hashcdoe 不同,則兩個物件一定不同。hashcdoe 其實就是物件位址對映值。equals 其實也是比較的對像的位址(沒有重寫的情況下)

那麼既然hashcdoe() 與equals(),都是比較物件的位址,為什麼要比較兩次呢,比如再這些hash容器中,從效率來講

equals重寫之後,效率不如計算hashcode 高,但是由於演算法的原因,hashcode 有可能存在一樣的值(不同物件hash衝突)

HashMap原始碼解讀

一 建立乙個hashmap都做了哪些工作?mapmap new hashmap hahmap無參構造方法 public hashmap 可以看到設定了載入因子 預設0.75 閾值 預設容量16 預設載入因子0.75 12 table是hashmap內部資料儲存結構entry陣列。當hashmap的s...

HashMap原始碼解讀

hashmap原始碼分析 me 對集合檢視的迭代,hashmap的桶數加實際大小與時間成正比,也就是說,不可以把桶樹設定的太多或負載因子太小。o 對集合檢視的迭代需要與hashmap 例項的 容量 桶數 加上其大小 鍵值對映的數量 成比例的時間。因此,如果迭代效能很重要,則不要將初始容量設定得太高 ...

HashMap原始碼解讀

public v put k key,v value static final int hash object key final v putval int hash,k key,v value,boolean onlyifabsent,boolean evict 如果在遍歷鍊錶中途,發現可以值相等...