栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

好的hashCode()实现

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

好的hashCode()实现

  1. 该值并不重要,它可以是您想要的任何值。质数将导致
    hashCode
    值的更好分布,因此首选。
  2. 您不必添加它们,只要满足
    hashCode
    合同,您就可以随意实现所需的任何算法:

*在Java应用程序执行期间,只要在同一对象上多次调用它,该

hashCode
方法就必须一致地返回相同的整数,前提是不修改该对象的equals比较中使用的信息。从一个应用程序的执行到同一应用程序的另一执行,此整数不必保持一致。
* 如果根据该
equals(Object)
方法两个对象相等,则
hashCode
在两个对象中的每个对象上调用该方法必须产生相同的整数结果。
*如果两个对象根据该
equals(java.lang.Object)
方法不相等,则不需要在两个对象中的每个对象上调用hashCode方法都必须产生不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同的整数结果可能会提高哈希表的性能。



有一些算法被认为不是很好的

hashCode
实现,简单地添加属性值就是其中之一。这样做的原因是,如果您有一个包含两个字段
Integer
a
Integer
b_的类,而您
hashCode()
只是对这些值求和,那么这些值的分布
hashCode
高度取决于实例存储的值。例如,如果大部分的值的 _一个_是0-10之间 _b_是0-10之间,然后将该
hashCode
值是0-20之间。这意味着如果将此类的实例存储在例如
HashMap
多个实例中,则将多个实例存储在同一存储桶中(因为很多实例中_a
b均 不同 __值但具有相同总和的值将放入同一存储桶中。
这将对地图上的操作性能产生不良影响,因为进行查找时,将使用来比较存储桶中的所有元素
equals()

关于算法,它看起来不错,它与Eclipse生成的算法非常相似,但是它使用不同的质数,而不是31。

@Overridepublic int hashCode() {    final int prime = 31;    int result = 1;    result = prime * result + (int) (a ^ (a >>> 32));    result = prime * result + (int) (b ^ (b >>> 32));    result = prime * result + (int) (c ^ (c >>> 32));    return result;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号