我有一个生成String对象的类:
key = "K:" + this.hashCode();
此类不继承任何其他类,并且它不会覆盖hashCode()。我有一个情况,我得到重复的键,所以一个对象的两个不同的实例返回完全相同的hashCode()。
如何发生这种情况以及可以采取哪些措施来避免这种情况?这个类是我正在使用的API的一部分,所以我无法控制它,但是如果有一些方法我可以在创建这个对象的实例时等待或者什么,那么类似的东西可以工作
答案 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