2013-04-03 28 views
1

HashMap中的add方法如何確定密鑰在HashMap中的位置?比如,如果我試圖在大小爲10的HashMap中放入「S」,「T」,「A」,「C」,「K」,它如何確定每個字母的位置?HashMap如何決定把東西放在哪裏?

+0

對象的'hashCode()'方法 –

+1

它散列它。我很肯定,如果你爲Google編寫一本好的維基百科文章,或者在哈希表中找到三篇,等等。 –

+0

不同意上一個問題的內容是對這個問題的滿意答案。 – Affe

回答

4

該對象的哈希碼的最低有效位用於選擇一個存儲桶。請注意,不存在大小爲10的java.util.HashMap,大小必須是2的冪,以便可以屏蔽這些位以選擇一個存儲桶。如果你傳遞10給構造函數,你將得到一個帶有16個桶的HashMap。

因此,減少爲清楚起見8位,如果「S」返回哈希碼123 java會做

01111011 & 00001111 -> 00001011 

,並把S IN桶11

真正的哈希地圖也適用二次哈希函數將位向右移位,以確保在最低有效位中存在具有某些熵的數據,這樣即使它們的hashCode函數不是那麼好,事情也很有可能均勻分佈。