草庐IT

hashCodes

全部标签

java - 为什么在添加到 HashSet 和 hashCode 匹配时不调用 equals()?

当我运行此代码时,为什么只调用hashCode()而不是equals方法,而我的hashCode()实现生成相同的HashSet的两个条目的hashCode?importjava.util.HashSet;publicclassTest1{publicstaticvoidmain(String[]args){Studentst=newStudent(89);HashSetst1=newHashSet();st1.add(st);st1.add(st);System.out.println("Hosize="+st1.size());}}classStudent{privateintna

java - Eclipse生成的hashCode函数好用吗?

Eclipse源菜单有一个“生成hashCode/equals方法”,它可以生成如下所示的函数。Stringname;@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((name==null)?0:name.hashCode());returnresult;}@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnfalse;if(getClass()!=obj.getC

java - Eclipse生成的hashCode函数好用吗?

Eclipse源菜单有一个“生成hashCode/equals方法”,它可以生成如下所示的函数。Stringname;@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((name==null)?0:name.hashCode());returnresult;}@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnfalse;if(getClass()!=obj.getC

java - 在Java中为具有循环引用的对象实现equals和hashCode

我定义了两个类,它们都包含对另一个对象的引用。它们看起来与此类似(这是简化的;在我的真实域模型中,A包含一个B列表,每个B都有一个对父A的引用):publicclassA{publicBb;publicStringbKey;@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((b==null)?0:b.hashCode());result=prime*result+((bKey==null)?0:bKey.hashCode());returnresult;}@Overridepub

java - 在Java中为具有循环引用的对象实现equals和hashCode

我定义了两个类,它们都包含对另一个对象的引用。它们看起来与此类似(这是简化的;在我的真实域模型中,A包含一个B列表,每个B都有一个对父A的引用):publicclassA{publicBb;publicStringbKey;@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((b==null)?0:b.hashCode());result=prime*result+((bKey==null)?0:bKey.hashCode());returnresult;}@Overridepub

java - 如何对 hashCode() 进行单元测试?

如何测试unittesting中的hashCode()函数?publicinthashCode(){intresult=17+hashDouble(re);result=31*result+hashDouble(im);returnresult;} 最佳答案 每当我重写equals和hash代码时,我都会按照JoshuaBloch在“EffectiveJava”第3章中的建议编写单元测试。我确保equals和hash代码是自反的、对称的和传递的。我还确保“不等于”适用于所有数据成员。当我检查对equals的调用时,我还确保hashC

java - 如何对 hashCode() 进行单元测试?

如何测试unittesting中的hashCode()函数?publicinthashCode(){intresult=17+hashDouble(re);result=31*result+hashDouble(im);returnresult;} 最佳答案 每当我重写equals和hash代码时,我都会按照JoshuaBloch在“EffectiveJava”第3章中的建议编写单元测试。我确保equals和hash代码是自反的、对称的和传递的。我还确保“不等于”适用于所有数据成员。当我检查对equals的调用时,我还确保hashC

java - 我应该如何在 hashCode() 中将 long 映射到 int?

我有一系列具有long字段的对象,该字段的值唯一标识整个系统中的特定对象,很像GUID。我已经覆盖了Object.equals()以使用此id进行比较,因为我希望它与对象的副本一起使用。现在我也想覆盖Object.hashCode(),这基本上意味着将我的long映射到某个int返回值。如果我正确理解了hashCode的用途,它主要用于哈希表,因此需要均匀分布。这意味着,只需返回id%2^32就足够了。仅此而已,还是我应该注意其他事情? 最佳答案 从Java8开始你可以使用Long.hashCode(guid);对于旧版本的Java

java - 我应该如何在 hashCode() 中将 long 映射到 int?

我有一系列具有long字段的对象,该字段的值唯一标识整个系统中的特定对象,很像GUID。我已经覆盖了Object.equals()以使用此id进行比较,因为我希望它与对象的副本一起使用。现在我也想覆盖Object.hashCode(),这基本上意味着将我的long映射到某个int返回值。如果我正确理解了hashCode的用途,它主要用于哈希表,因此需要均匀分布。这意味着,只需返回id%2^32就足够了。仅此而已,还是我应该注意其他事情? 最佳答案 从Java8开始你可以使用Long.hashCode(guid);对于旧版本的Java

java - Enum.hashCode() 背后的原因是什么?

Enum类中的方法hashCode()是final的,定义为super.hashCode(),表示它根据实例地址返回一个数字,是程序员POV的随机数。定义它,例如因为ordinal()^getClass().getName().hashCode()在不同的JVM中是确定性的。它甚至会更好一点,因为最低有效位会“尽可能多地改变”,例如,对于包含多达16个元素和大小为16的HashMap的枚举,肯定不会发生冲突(当然,使用EnumMap更好,但有时不可能,例如没有ConcurrentEnumMap)。按照目前的定义,你没有这样的保证,是吗?答案总结使用Object.hashCode()与上