我正在使用散列图来存储具有随时间演变的密钥的对象。
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,因此我的问题是:
答案 0 :(得分:5)
留下重复条目的实际内存成本是多少(没有重叠风险)?
嗯,你有一个额外的条目,密钥本身不能被垃圾收集。如果密钥是“大”,那可能是个问题。这也意味着你永远无法获得准确的计数,你永远无法明智地迭代所有的价值观等等。这对我来说似乎是一个坏主意。
我刚刚错过了一些巧妙的swapKey()方法吗?
没有这样的事情 - 这对我来说是一个相当罕见的要求。任何这样的方法几乎都要做你正在做的事情 - 它必须找到旧密钥,从数据结构中删除它,并插入新密钥的条目。通过一次了解这两个操作,我无法想象任何可能的优化。
答案 1 :(得分:1)
交换密钥不容易,因为密钥用于散列。 更改密钥意味着hashvalue也可能不同。在这种情况下,更改密钥符合删除和重新插入后