2013-10-10 28 views
0

在下面的代碼:String鍵混合使用大寫覆蓋條目的Hashmap

HashMap<String, Integer> hm = new HashMap<String, Integer>(); 
hm.put("Driller", 0); 
hm.put("Planner", 1); 

「規劃」條目覆蓋「鑽」。它們各自的哈希碼顯然不同。如果鑰匙只是小寫(「司鑽」和「計劃者」),然後正常工作。但是,由於項目內部的不同原因,無法更改關鍵案例。

我正在使用JDK 7 Update 25 64位,但據我所知String自從早期版本以來,hashcodes已經非常穩定。

你知道發生了什麼,我該如何解決?

+1

當我試圖在添加這兩個條目後SOP地圖時,我得到了這個輸出 - * {Planner = 1,Driller = 0} *。我沒有看到'Driller'被'Planner'覆蓋。 – SudoRahul

+0

@ R.J:相同。我做到了。沒問題。 –

+0

你是指訂單更改? 試試這個答案, http://stackoverflow.com/questions/10710193/java-hashmap-how-to-preserve-inserting-order – user1490927

回答

1

這並不是最重要的。它只是改變記錄的順序,因爲你使用的是hashmap。它會自動按給定字符串鍵的哈希值進行排序。輸出您的地圖並查看結果。

1

只是關於hashmaps的評論。即使兩個密鑰的哈希碼相同,也不會被覆蓋。這些密鑰必須等於equals方法的值才能被覆蓋。

+0

在回答中,這是一個註釋陳述是有點怪。如果你想寫評論,那麼你應該這樣做。但是你的「評論」的內容是正確的。如果您通過提供更多的細節來了解可能會看到的OP,那麼您的答案會非常好。 –

0

Mustafa Genç是對的。
我早些時候評論過,但等着看別人的答案&終於決定發佈圖片。
調試

HashMap<String, Integer> hm = new HashMap<String, Integer>(); 
hm.put("Driller", 0); 
hm.put("Planner", 1); 

最後陳述後後,HM(HashMap中)與按鍵兩種元素,你可以看到

enter image description here

而且

"Driller".hashCode() == "Planner".hashCode() 

回報