Java HashMap密钥更新与双条目

Java HashMap密钥更新与双条目,java,hashmap,Java,Hashmap,我使用hashmap来存储具有随时间变化的键的对象。 HashMap<String,Stuff> hm = new HashMap<String,Stuff>() Stuff stuff = new Stuff(); hm.put( "OrignalKey", stuff); HashMap hm=新的HashMap() 东西=新东西(); hm.put(“OrignalKey”,东西); 我没有找到比删除“OrignalKey”并用同一个对象放置一个新条目更好的方法 hm.remo

我使用hashmap来存储具有随时间变化的键的对象。

HashMap<String,Stuff> hm = new HashMap<String,Stuff>() Stuff stuff = new Stuff(); hm.put( "OrignalKey", stuff); HashMap hm=新的HashMap() 东西=新东西(); hm.put(“OrignalKey”,东西); 我没有找到比删除“OrignalKey”并用同一个对象放置一个新条目更好的方法

hm.remove("OriginalKey"); hm.put("NewKey", stuff); hm.remove(“OriginalKey”); hm.put(“新钥匙”,东西); remove()似乎占用了大量cpu资源,因此我的问题是:

  • 保留重复条目的实际内存成本是多少(没有重叠风险)
  • 我是不是缺少了一些简洁的swapKey()方法
  • 保留重复条目的实际内存成本是多少(没有重叠风险)

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

    我是不是缺少了一些简洁的swapKey()方法

    没有这样的事情——而且对我来说,这是一个相当罕见的要求。任何这样的方法都必须执行您正在执行的操作—它必须找到旧密钥,将其从数据结构中删除,然后为新密钥插入一个条目。我很难想象仅仅通过同时了解这两个操作就可以实现任何优化

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

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

    我是不是缺少了一些简洁的swapKey()方法


    没有这样的事情——而且对我来说,这是一个相当罕见的要求。任何这样的方法都必须执行您正在执行的操作—它必须找到旧密钥,将其从数据结构中删除,然后为新密钥插入一个条目。我很难想象仅仅通过同时了解这两个操作就可以实现任何优化。

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

    可能太明显的解决方案:不要使用会随时间“演变”的密钥。?可能使用StringBuilder?我会试一试,感谢可能太明显的解决方案:不要使用会随时间“演变”的密钥。?可能使用StringBuilder?我会试一试,谢谢你的及时回复。如果你需要一辆手推车来获得这些奖牌,请告诉我:o)谢谢你的及时回复。如果你需要一辆手推车来获得这些奖牌,请告诉我:o)