如果我在覆盖HashCode()函数时返回常量整数会发生什么



当我在以下语句中使用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()被覆盖,也不应影响它。

相关内容

  • 没有找到相关文章

最新更新