【发布时间】:2018-08-30 20:15:34
【问题描述】:
我是 Java 新手,我对 Java 对象的哈希码有疑问:
public class HelloWorld
{
String name;
int age;
}
属性值相同的不同对象会有相同的hashCode吗?
HelloWorld hello1 = new HelloWorld();
hello1.name = "hello";
hello1.age = 20;
HelloWorld hello2 = new HelloWorld();
hello2.name = "hello";
hello2.age = 20;
hello1 和 hello2 会有相同的 hashCode 吗?
另外,属性值不同的对象是否有可能具有相同的hashCode?p>
【问题讨论】:
-
是的,他们可以。是的,这是可能的。
-
如何实现 hashCode 产生不同的结果?
-
使用无冲突的perfect hashing function。然而,这不是
Object::hashCode方法的目标。它不应该保证每个都有不同的值。其主要目的是优化在HashSet或HashMap等哈希结构中的搜索。 -
@ratzip 你不能 -
hashCode返回一个int,它被限制为 40 亿个值。但是您可以创建更多不同的对象:其中一些虽然没有相同的字段值,但将具有相同的hashCode。