不同类的哈希码冲突

时间:2011-09-09 18:16:15

标签: java

我在Integer字段周围有两个简单的包装类,我必须覆盖equals()和hashCode()。最后,它们都使用相同的hashCode()算法,因此如果Integer字段相同,则哈希码会发生冲突。

由于对象是不同的类型,这是否重要,或者我是否应该只关心我是否希望将它们作为键混合在同一个HashMap中?

2 个答案:

答案 0 :(得分:13)

hashCode()对于两个对象是相等的说“这些对象是相等的偶然,通过调用equals()进行仔细研究”。只要这些类的equals()方法正确,哈希码相同就不是问题。

hashCode()的一般规则是,如果两个对象相等,则它们的哈希码也应该相等。请注意,规则不是“如果两个对象具有相同的哈希码,那么它们应该相等。”

答案 1 :(得分:1)

如果您可能有一个哈希映射,其中两个类型的对象具有相同的值,那么这显然是潜在的性能问题。 HashMap等不查看实际的运行时类 - 实际上没有一种标准的方法来判断不同类的两个对象是否相等(例如,List s与ArrayListArrays.asList生成的相同顺序的相同值应该相等)。对于HashMap,我猜测命中不会太糟糕,但可能更糟糕的是,例如,在第一次检查时获得重大收益的探测性实施。