如果在重写hashCode()函数时返回常量整数会发生什么?

时间:2017-02-27 12:28:25

标签: java hashcode

当我在以下语句中使用hashCode()方法时:

System.out.println(obj.getClass().getName() + "@" +
                  Integer.toHexString(System.identityHashCode(obj))); 

我得到这样的输出:

  

"联系@ 29453f441"

每个对象都是唯一的。覆盖hashCode()会产生什么影响?

2 个答案:

答案 0 :(得分:2)

你会丢失一个hashmap给出的任何性能,它可以在O(1)时间内从具有不同哈希值的对象中检索集合中的项目,这是我们在使用HashMaps时想要实现的。

以下是另一个问题的引用:

  

当两个不相等的对象具有相同的哈希值时,这会导致哈希表中的冲突,因为两个对象都希望位于同一个槽中(有时称为桶)。

如果不使用hashmap或其他依赖于对象哈希码的算法,则不会产生任何问题。

至于比较,他们将通过equals()进行区分。

答案 1 :(得分:-1)

来自System class的文档

public static int identityHashCode(Object x)

返回与默认方法hashCode()返回的给定对象相同的哈希码,无论给定对象的类是否覆盖hashCode()。空引用的哈希码为零。

因此,即使重写hashcode(),它也不应该影响它。