草庐IT

hashcode

全部标签

java - 为什么String中的equals方法不使用hash?

String类中equals方法的代码是publicbooleanequals(ObjectanObject){if(this==anObject){returntrue;}if(anObjectinstanceofString){StringanotherString=(String)anObject;intn=count;if(n==anotherString.count){charv1[]=value;charv2[]=anotherString.value;inti=offset;intj=anotherString.offset;while(n--!=0){if(v1[i++

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()与上

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

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

java - HashMaps 和 Null 值?

如何将空值传入HashMap?以下代码片段适用于填写的选项:HashMapoptions=newHashMap();options.put("name","value");Personperson=sample.searchPerson(options);System.out.println(Person.getResult().get(o).get(Id));那么问题是必须在选项和/或方法中输入什么来传递空值?我尝试了以下代码但没有成功:options.put(null,null);Personperson=sample.searchPerson(null);options.put(

java - HashMaps 和 Null 值?

如何将空值传入HashMap?以下代码片段适用于填写的选项:HashMapoptions=newHashMap();options.put("name","value");Personperson=sample.searchPerson(options);System.out.println(Person.getResult().get(o).get(Id));那么问题是必须在选项和/或方法中输入什么来传递空值?我尝试了以下代码但没有成功:options.put(null,null);Personperson=sample.searchPerson(null);options.put(

java - 接口(interface)中的 toString()、equals() 和 hashCode()

所以,我有一个接口(interface)需要实现一堆方法,方法名称无关紧要。实现这个接口(interface)的对象经常被放入集合中,并且还有我希望它们使用的特殊toString()格式。所以,我认为将hashCode()、equals()和toString()放入接口(interface)会很方便,以确保我记得覆盖这些的默认方法。但是当我将这些方法添加到接口(interface)时,如果我没有实现这三个方法,IDE/编译器不会提示,即使我明确地将它们放在接口(interface)中。为什么不对我强制执行?如果我不实现任何其他方法,它会提示,但它不会强制执行这三个方法。是什么赋予了?有

java - 接口(interface)中的 toString()、equals() 和 hashCode()

所以,我有一个接口(interface)需要实现一堆方法,方法名称无关紧要。实现这个接口(interface)的对象经常被放入集合中,并且还有我希望它们使用的特殊toString()格式。所以,我认为将hashCode()、equals()和toString()放入接口(interface)会很方便,以确保我记得覆盖这些的默认方法。但是当我将这些方法添加到接口(interface)时,如果我没有实现这三个方法,IDE/编译器不会提示,即使我明确地将它们放在接口(interface)中。为什么不对我强制执行?如果我不实现任何其他方法,它会提示,但它不会强制执行这三个方法。是什么赋予了?有

java - `hashCode` 的默认实现是什么?

这个问题在这里已经有了答案:Whatisanobject'shashcodeifhashCode()isnotoverridden?(12个回答)关闭9年前。如果不重写hashCode方法,hashCode的默认实现是什么? 最佳答案 然后这个类从它的一个祖先继承hashCode。如果没有一个覆盖它,那么Object.hashCode被使用了。来自docs:Asmuchasisreasonablypractical,thehashCodemethoddefinedbyclassObjectdoesreturndistinctinte