2012-06-16 58 views
0

我正在使用散列圖來存儲具有隨着時間演變的密鑰的對象。
HashMap key udpate vs double條目

HashMap<String,Stuff> hm = new HashMap<String,Stuff>() 
Stuff stuff = new Stuff(); 
hm.put("OrignalKey", stuff); 

我沒有發現任何東西不是刪除「OrignalKey」更好和put()與同一個對象的新條目。

 
hm.remove("OriginalKey"); 
hm.put("NewKey", stuff); 

刪除()似乎都採取了一種顯著CPU通行費,因此我的問題:

  1. 什麼是實際的存儲成本要離開重複的條目(沒有重疊的風險)?
  2. 我只是缺少一些整潔的swapKey()方法?
+2

也許太明顯的解決方案:不要使用隨時間「演變」的密鑰。 –

+0

?可能使用StringBuilder? –

+0

我會給它一個鏡頭,謝謝 – MonoThreaded

回答

5

離開重複條目的實際內存成本是多少(不存在重疊風險)?

那麼,你有一個額外的條目,密鑰本身不能被垃圾收集。如果密鑰「很大」,那可能是一個問題。這也意味着你永遠無法獲得準確的計數,你永遠無法合理地遍歷所有的值,等等。對我來說這似乎是一個壞主意。

我只是缺少一些整潔的swapKey()方法?

有沒有這樣的事情 - 這感覺對我來說是一個相當罕見的要求。任何這樣的方法幾乎都必須做你正在做的事情 - 它必須找到舊密鑰,從數據結構中刪除它,併爲新密鑰插入一個條目。我不能輕易想象任何優化都可能只是通過一次瞭解這兩個操作。

+0

感謝您的及時回覆。讓我知道你是否需要所有這些獎牌的獨輪車:o) – MonoThreaded

1

交換密鑰並不容易,因爲密鑰用於散列。 更改密鑰意味着hash值最有可能不同。在這種情況下,更改密鑰符合刪除和重新插入