HashMap密钥更新与双条目

时间:2012-06-16 20:08:16

标签: java hashmap

我正在使用散列图来存储具有随时间演变的密钥的对象。

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

我没有找到比删除&#34; OrignalKey&#34;更好的东西。并put()一个具有相同对象的新条目。

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

remove()似乎占用了大量的cpu,因此我的问题是:

  1. 保留重复条目的实际内存成本是多少(没有重叠风险)?
  2. 我刚刚错过了一些巧妙的swapKey()方法吗?

2 个答案:

答案 0 :(得分:5)

  

留下重复条目的实际内存成本是多少(没有重叠风险)?

嗯,你有一个额外的条目,密钥本身不能被垃圾收集。如果密钥是“大”,那可能是个问题。这也意味着你永远无法获得准确的计数,你永远无法明智地迭代所有的价值观等等。这对我来说似乎是一个坏主意。

  

我刚刚错过了一些巧妙的swapKey()方法吗?

没有这样的事情 - 这对我来说是一个相当罕见的要求。任何这样的方法几乎都要做你正在做的事情 - 它必须找到旧密钥,从数据结构中删除它,并插入新密钥的条目。通过一次了解这两个操作,我无法想象任何可能的优化。

答案 1 :(得分:1)

交换密钥不容易,因为密钥用于散列。 更改密钥意味着hashvalue也可能不同。在这种情况下,更改密钥符合删除和重新插入后