Object.hashCode()返回重复

Tri*_*Man 2 java

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

key = "K:" + this.hashCode();
Run Code Online (Sandbox Code Playgroud)

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

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

kos*_*osa 6

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

根据Object.hashCode()文档:

如果两个对象根据equals(java.lang.Object)方法不相等,则不需要在两个对象中的每一个上调用hashCode方法必须生成不同的整数结果.但是,程序员应该知道为不等对象生成不同的整数结果可能会提高哈希表的性能.

可以做些什么来避免它? 

以下是其他SO问题中提出的一些最佳实践:

Hashcode实现最佳实践1

Hashcode实现最佳实践2

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

  • 换句话说,没有人向你承诺哈希码是唯一的,所以你不应该以假定这种方式编写你的程序. (3认同)