java – hashCode实现“等于任何一些字段相等”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – hashCode实现“等于任何一些字段相等”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1291字,纯文字阅读大概需要2分钟。
内容图文
![java – hashCode实现“等于任何一些字段相等”](/upload/InfoBanner/zyjiaocheng/795/d4a141deee2847fe93fad0cf8f2715db.jpg)
如果其中一个字段相等,我希望特定类的对象相等.如何为这样的类编写一致的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实现“等于任何一些字段相等”全部内容,希望文章能够帮你解决java – hashCode实现“等于任何一些字段相等”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。