1. 程式人生 > >轉:HashMap實現原理分析(面試問題:兩個hashcode相同 的對象怎麽存入hashmap的)

轉:HashMap實現原理分析(面試問題:兩個hashcode相同 的對象怎麽存入hashmap的)

影響 strong 就會 怎麽 ash 地方 shm nbsp 擔心

原文地址:https://www.cnblogs.com/faunjoe88/p/7992319.html

主要內容:

1)put

疑問:如果兩個key通過hash%Entry[].length得到的index相同,會不會有覆蓋的危險?

  這裏HashMap裏面用到鏈式數據結構的一個概念。上面我們提到過Entry類裏面有一個next屬性,作用是指向下一個Entry。

打個比方, 第一個鍵值對A進來,通過計算其key的hash得到的index=0,記做:Entry[0] = A。一會後又進來一個鍵值對B,通過計算其index也等於0,現在怎麽辦?

HashMap會這樣做:B.next = A,Entry[0] = B,如果又進來C,index也等於0,那麽C.next = B

,Entry[0] = C;

這樣我們發現index=0的地方其實存取了A,B,C三個鍵值對,他們通過next這個屬性鏈接在一起。

所以疑問不用擔心。也就是說數組中存儲的是最後插入的元素。到這裏為止,HashMap的大致實現,我們應該已經清楚了。

當然HashMap裏面也包含一些優化方面的實現,這裏也說一下。比如:Entry[]的長度一定後,隨著map裏面數據的越來越長,

這樣同一個index的鏈就會很長,會不會影響性能?HashMap裏面設置一個因子,隨著map的size越來越大,Entry[]會以一定的規則加長長度。

轉:HashMap實現原理分析(面試問題:兩個hashcode相同 的對象怎麽存入hashmap的)