我遇到了JAVA地圖的問題。我在地圖中輸入一個對象作爲鍵。然後我修改鍵,地圖不再將該對象視爲地圖的關鍵。即使對象內的鍵已被相應地修改。Java修改地圖內的關鍵對象
我正在與來自StanfordNLP的對象CoreLabel
一起工作,但它適用於我想的一般情況。
Map <CoreLabel, String> myMap = new HashMap...
CoreLabel key = someCreatedCoreLabel
myMap.put(key, someString)
myMap.get(key) != null ----> TRUE
key.setValue("someValue");
myMap.get(key) != null ----> FALSE
我希望我已經夠清楚了。問題是爲什麼最後的陳述是錯誤的?我不是一個非常有經驗的程序員,但我期望它是真實的。可能與CoreLabel
對象有關?
我是否.equals()
仍然成立,它實際上
for(CoreLabel token: myMap.keySet()) {
if(key.equals(token))
System.out.println("OK");
}
當然,對象將是平等的。不同的是修改對象的哈希碼和對象所在的相應桶(取決於值是否改變了哈希碼) –
好吧,我明白,非常感謝。任何解決這個問題?有沒有辦法重新哈希? – Altober
重新哈希'HashMap'的唯一方法是添加比當前容量更多的元素。這將迫使它重新計算哈希值。你真的不應該這樣做。 –