当我在以下语句中使用hashCode()
方法时:
System.out.println(obj.getClass().getName() + "@" +
Integer.toHexString(System.identityHashCode(obj)));
我得到这样的输出:
"联系@29453F441"
这对于每个对象都是唯一的。覆盖hashCode()
的影响是什么?
您将失去哈希图给出的任何性能,可以从o(1)中的o(1)时间中检索物品的物品,以获取具有不同哈希的对象,这就是我们在使用hashmaps时要实现的目标。
这是另一个问题的报价:
当两个不相等的对象具有相同的哈希值时,这会在哈希表中发生碰撞,因为两个对象都希望在同一插槽中(有时称为桶)。
如果您不使用依赖对象的哈希码的hashmap或其他算法,则不会引起任何问题。
至于比较,它们将是区分的thorugh equals()
。
来自系统类文档
public static int IndentityHashCode(Object X)
是否返回给定对象的相同的哈希代码,与默认方法hashCode()返回,无论给定对象的类覆盖hashCode()是否返回。null引用的哈希代码为零。
因此,即使hashCode()被覆盖,也不应影响它。