2015-01-14 66 views
0

我正在尋找哈希和更具體的哈希映射。我不明白hashCode()方法,並真的希望有人爲我清除它。我有一個小測試的緣故,寫這樣的代碼:HashMap的方法hashCode和它的效果

Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 

    map.put(4,4); 
    map.put(5,4); 

    System.out.println(map.hashCode()); 

的位置輸出爲1。然而,當我改變一點點像這樣:

map.put(2,5); 
    map.put(7,4); 

輸出爲10。

這是如何計算的,或者我應該如何知道,而不運行它將打印出來的內容?

在此先感謝!

+0

你爲什麼喜歡在HashMap中的散列碼?你想使用地圖本身作爲另一張地圖的關鍵(這可能是一個壞主意)? – assylias

+0

它僅用於學習目的:) – user3161041

+0

查看HashMap如何調用其項目的哈希碼方法將它們放在正確的存儲桶中可能會更有趣。如果你關注我,HashMap的哈希碼本質上是其項目的哈希碼的組合,但不是哈希映射本身的哈希策略的一部分。 – assylias

回答

0

HashMap的hashCode是地圖中的條目的函數,但您調用map.hashCode()沒有多大意義。

hashCode方法的HashMap類的主要用途是確定應該存儲和搜索密鑰的哪個桶。這是通過撥打hashCode爲您在HashMap中投入/搜索的密鑰完成的。

順便說一句,這裏有hashCode爲你把你的地圖中的條目計算:

  • HashMap中的hashCodehashCode S中的條目的總和。
  • EntryhashCodehashCode的關鍵值異或hashCode的值。
  • Integer的hashCode是int值。

在第一次測試:

4^4 + 5^4 = 0 + 1 = 1; 

對於第二個測試:

2^5 + 7^4 = 7 + 3 = 10; 
+0

因此,它是以獨特的方式存儲,將使您更容易搜索?它只是簽署隨機值,但獨特的或它是如何做到這一點? – user3161041

+0

@ user3161041'hashCode'不能返回隨機值,因爲對於狀態不變的Object調用'hashCode'兩次必須返回相同的值。它也不必返回一個唯一的值。你應該在Object類中讀取hashCode的Javadoc。 – Eran

+0

這是真的謝謝。我感謝您的幫助 :) – user3161041

相關問題