0

我正在使用哈希图来存储具有随时间演变的键的对象。

HashMap<String,Stuff> hm = new HashMap<String,Stuff>()
东西东西=新东西();
hm.put("原始密钥", 东西);

我没有找到比删除“OrignalKey”和 put() 具有相同对象的新条目更好的方法。

hm.remove("原始密钥");
hm.put("NewKey", 东西);

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

  1. 留下重复条目的实际内存成本是多少(没有重叠风险)?
  2. 我只是缺少一些简洁的 swapKey() 方法吗?
4

2 回答 2

5

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

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

我只是缺少一些简洁的 swapKey() 方法吗?

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

于 2012-06-16T20:12:08.977 回答
1

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

于 2012-06-16T20:16:04.280 回答