java hashcode相等_java – hashCode实现“等于任何一些字段相等”

如果其中一个字段相等,我希望特定类的对象相等.如何为这样的类编写一致的hashCode方法?

(免责声明因为我知道这不是最佳实践:该类是另一个类的包装器,应该用于Maps中的键.这两个不同的具有一个相等字段的对象将导致相同的Map条目.实际上每个字段都会自己识别底层对象,但我并不总是对两个可用的对象具有相同的识别字段.我无法控制并因此改变这种“模糊”识别机制.也可以采用替代解决方案来解决这个问题.)

是否有相应的实现hashCode()的策略?我只知道在equals中涉及连词(和&&)的实现.如果其中一个字段相等,如何确保hashCode()是相同的?

这是我想要编写一致的hashCode()实现的简化equals方法:

public boolean equals(C other)

{

return (field1 != null && field1.equals(other.field1))

|| (field2 != null && field2.equals(other.field2))

|| (field3 != null && field3.equals(other.field3));

}

编辑:根据输入数据,没有像(1,2,3)等情况等于(1,6,7).只生成对象,使得某些字段可以为null,但不会像示例中那样自相矛盾.简单地说,实际上只有(1,2,3)的组合应该是(1,2,3),(1,null,null),(null,2,null),(1,2,null)和等等.我承认这种方法并不是特别强大.

解决方法:

您通常不使用对象类的一个字段来实现equals()和hashCode().每个人都可能会建议你反对它.通常的做法是确保比较所有字段并确保它们都相等,以便调用.equals(). hashCode()使用.equals()来散列这些对象.但是,如果你可以控制你正在做的事情,你可以简单地使用你对象的特定字段的hashCode()并基于它覆盖.equals()和.hashCode()(但同样不可取).

标签:java,hashcode,equals

来源: https://codeday.me/bug/20190623/1275376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值