Object.hashCode()返回重复

时间:2013-08-29 18:50:23

标签: java

我有一个生成String对象的类:

key = "K:" + this.hashCode();

此类不继承任何其他类,并且它不会覆盖hashCode()。我有一个情况,我得到重复的键,所以一个对象的两个不同的实例返回完全相同的hashCode()。

如何发生这种情况以及可以采取哪些措施来避免这种情况?这个类是我正在使用的API的一部分,所以我无法控制它,但是如果有一些方法我可以在创建这个对象的实例时等待或者什么,那么类似的东西可以工作

2 个答案:

答案 0 :(得分:6)

可能会发生。您可能会为两个不同的对象获取相同的哈希码:

根据Object.hashCode()文档:

  

如果两个对象根据不相等而不是必需的   equals(java.lang.Object)方法,然后调用hashCode方法   两个对象中的每一个都必须产生不同的整数结果。   但是,程序员应该意识到产生了不同的   不等对象的整数结果可以提高性能   哈希表。

可以采取哪些措施来避免它?

以下是其他SO问题中建议的一些最佳做法:

Hashcode implementation best practice1

Hashcode implementation best practice2

尽管如此,这些只是最佳做法,并不能保证避免使用相同的哈希码。在你的情况下,我认为你根本不应该依赖哈希码。

答案 1 :(得分:0)

如果HashCodes相等,则不能证明它们的对象是相等的!

但是如果HashCodes是UNequal,则对象是UNequal。

假设在计算过程中没有选择随机值!

我建议从IDE生成HashCode