2012-12-17 55 views
1

我有TreeMap自定義Comparator。我想更新地圖的其中一個值,但如果Comparator檢查的字段發生更改,Map是否保持其順序?如何更新地圖中的值,維護訂單

+0

如何更新值?你是用'put'來替換一個值,還是直接修改'Object'? – Dancrumb

+0

您更改了密鑰或值? – Kent

+0

希望您沒有使用比較器的破碎怪物,它對輸入值進行排序。 –

回答

2

您不應該修改存儲在地圖中的密鑰。或者至少不修改用於實施equals()hashCode()(在HashMap的情況下)或compareTo()/compare()(在SortedMap的情況下)的任何字段。

這將使地圖處於不一致的狀態,並且您不能指望它在執行此操作後可靠地工作。

當然,您可以從地圖上刪除鍵,修改它,然後重新插入它。

但是你最好使用不可改變的類型作爲你的地圖的按鍵,以避免在腳中拍攝自己。

+0

是的,我想這就是解決方案。我可以用相同的鍵插入修改的對象,它將更新地圖。謝謝。 – user1911149

+1

如果你所做的只是修改_value_ - 而不是關鍵 - 那麼你不必做任何事情。 –

+0

@Louis Wasserman但是'Map'中的位置取決於值,所以'Map'需要更新。 – user1911149