为了账号安全,请及时绑定邮箱和手机立即绑定

集合的hashCode方法的最佳实现

集合的hashCode方法的最佳实现

慕神8447489 2019-06-19 10:23:44
集合的hashCode方法的最佳实现我们如何决定如何最好地实现hashCode()方法(假设Eques方法已被正确重写)?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

最好的实现?这是一个很难回答的问题,因为它取决于使用模式。

a对于几乎所有案件,都提出了合理的良好执行建议。乔希·布洛赫有效Java项目8(第二版)。最好的方法是在那里查找,因为作者解释了为什么这种方法是好的。

短版

  1. 创建一个int result并分配一个非零价值。

  2. 每一个领域 f测试equals()方法,计算哈希代码。c通过:

    • 如果字段f是

      boolean

      :计算

      (f ? 0 : 1);

    • 如果字段f是

      bytecharshort

      int

      :计算

      (int)f;

    • 如果字段f是

      long

      :计算

      (int)(f ^ (f >>> 32));

    • 如果字段f是

      float

      :计算

      Float.floatToIntBits(f);

    • 如果字段f是

      double

      :计算

      Double.doubleToLongBits(f)

      并像对待每一个长期价值一样处理回报价值;
    • 如果字段f是

      对象

      *使用

      hashCode()

      方法或0如果

      f == null;

    • 如果字段f是

      列阵

      *将每个字段视为单独的元素,并在

      递归方式

      并将下面描述的值组合起来。
  3. 组合散列值c带着result:

    result = 37 * result + c
  4. 回归result

对于大多数使用情况,这应该会导致哈希值的适当分布。


查看完整回答
反对 回复 2019-06-19
?
慕慕森

TA贡献1856条经验 获得超17个赞

如果您对dmeister推荐的有效Java实现感到满意,可以使用库调用而不是滚动自己的:

@Overridepublic int hashCode() {
    return Objects.hashCode(this.firstName, this.lastName);}

这需要番石榴(com.google.common.base.Objects.hashCode)或Java 7中的标准库(java.util.Objects.hash)但工作方式是一样的。


查看完整回答
反对 回复 2019-06-19
?
千巷猫影

TA贡献1829条经验 获得超7个赞

最好使用Eclipse提供的功能,它做得很好,您可以将您的精力和精力用于开发业务逻辑。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 355 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号