【发布时间】:2012-07-16 19:41:59
【问题描述】:
我使用HashSet,我需要修改一个对象的ID,但是它改变了hashcode并且破坏了HashSet和hashCode()方法的规则。
什么是最好的解决方案:从 Set 中删除对象并添加具有新 ID 的对象,或者在 Set 中的每个对象中保留哈希码(例如在构造函数中生成),或者有其他方法可以解决这个问题吗?
感谢您的帮助。
更新: 我犯了一个错误:在对象中保留哈希码是很糟糕的,因为在这种情况下,相同的对象可以有不同的哈希码。
【问题讨论】:
-
你能覆盖
hashCode,让它做你想做的事吗? -
根据定义,ID(entifier) 永远不应该在给定对象上改变。为什么允许对象的 ID 可变?
-
好吧,当我修改我的 id 时,我无法生成相同的哈希码。
-
是的,要走的路是 1. 从任何集合中移除对象 2. 对其进行变异 3. 将其放回原处。您最终可能会发现这样的对象已经存在,所以双重好你删除了它。
-
这是因为我必须保留像 1,2,3 这样的 ID...,当我删除对象时,我会在必要时修改 ID。只是错了,是吗?
标签: java hashmap hashcode hashset