Java 向hashCode()添加数字是为了什么?

Java 向hashCode()添加数字是为了什么?,java,duplicates,hashset,hashcode,Java,Duplicates,Hashset,Hashcode,我是贝吉纳 我有一个源代码,我找到了这个方法 @覆盖 公共int hashCode(){ 返回此.name.hashCode()+57; } 它可以从HashSet对象中删除重复项,我的问题是57为什么存在,我删除了它,然后代码运行良好,那么在这个方法中数字的用途是什么?在代码中: class MyClass { public int hashCode(){ return this.name.hashCode() + 57; } } 这个问题是有效的,因为this.n

我是贝吉纳 我有一个源代码,我找到了这个方法

@覆盖
公共int hashCode(){
返回此.name.hashCode()+57;
}
它可以从HashSet对象中删除重复项,我的问题是57为什么存在,我删除了它,然后代码运行良好,那么在这个方法中数字的用途是什么?

在代码中:

class MyClass {
   public int hashCode(){
      return this.name.hashCode() + 57;
   }
}
这个问题是有效的,因为
this.name.hashCode()
是一个格式良好的
hashCode()
实现(我们可以假设
this.name
是一个
字符串


我认为添加这个数字是因为方法
hashCode()
来自
Object
。假设您有一个
集合
,其值类型为
String
MyClass
。如果
字符串
实例与
MyClass.name
中的一个实例相同,则添加57可避免两者共享相同的hashcode

ya…..之所以使用它,是因为当我们使用示例2参数存储多个对象时,Hashcode()来自对象类an,但我们希望使用equal来比较参数中的任何一个..在本例中,添加了name,因此添加了this.name和57,以便生成一个好的Hashcode(足够大,并且在int.的范围内,没有其他好的理由)…

@SotiriosDelimanolis乘以素数是一回事,这里加上57没有什么好的理由。唯一的原因是不管是谁做的,他都不知道自己在做什么。这就是我的想法。如果你有不同的想法,请告诉我。我不知道@azurefrog是如何帮助你的。你确实不需要57,他们的链接也没有说明这一点。是的,这两个链接讨论了素数的乘法。这里只是添加了一些数字57,没有什么好的理由。@peter.petrov,请仔细检查SotiriosDelimanolis的链接。它讨论了添加常量(因此它是重复的)。什么?a
没有键。另外,a(合理的).
Set
不能同时包含
String
MyClass
Map
有键,但同样只有其中一种类型。你说得对,Set不能同时包含键(我将更正我的帖子)。但是Map或set可以存储Object抱歉,但这个答案不正确。这根本没有任何意义。即使Map同时存储Object和MyClass实例,并且没有57,也不会有任何问题。如果hashcode不同,仍然没有问题,但效率会更高(无需测试是否相等)。我不是说在字符串哈希代码中添加57是明智的。我只是想找到一个动机。顺便说一句,哈希代码可以用于比存储在Map@peter.petrov当然。即使所有实现为
hashCode
的类都返回1234;,也不会有任何问题。除了性能。这就是为什么我们试图避免返回与另一个已知不同的对象相同的哈希代码。诚然,这种更改影响很小。但更改也很小。