当我在以下语句中使用hashCode()
方法时:
System.out.println(obj.getClass().getName() + "@" +
Integer.toHexString(System.identityHashCode(obj)));
我得到这样的输出:
"联系@ 29453f441"
每个对象都是唯一的。覆盖hashCode()
会产生什么影响?
答案 0 :(得分:2)
你会丢失一个hashmap给出的任何性能,它可以在O(1)时间内从具有不同哈希值的对象中检索集合中的项目,这是我们在使用HashMaps时想要实现的。
以下是另一个问题的引用:
当两个不相等的对象具有相同的哈希值时,这会导致哈希表中的冲突,因为两个对象都希望位于同一个槽中(有时称为桶)。
如果不使用hashmap或其他依赖于对象哈希码的算法,则不会产生任何问题。
至于比较,他们将通过equals()
进行区分。
答案 1 :(得分:-1)
来自System class的文档
public static int identityHashCode(Object x)
返回与默认方法hashCode()返回的给定对象相同的哈希码,无论给定对象的类是否覆盖hashCode()。空引用的哈希码为零。
因此,即使重写hashcode(),它也不应该影响它。