我理解hashcode()和equals()之间的契约。我不明白的是,在计算相同的时候,我是否应该包括我的班级(bean)的所有字段?例如我需要在基于散列的集合中使用我的bean对象并需要排序。 bean类包含~25个字段。
是否有必要在覆盖HashCode()和euqals()时考虑其所有字段?
答案 0 :(得分:1)
使用所有成员绝对不是强制性的,但我建议保留所有变量从对象变为对象。如果存在其他唯一字段,则可以存在常量或甚至变量,从对象到对象可能没有太大变化,如果有其他唯一字段,则可以删除它们。
我甚至在其中一个项目中看到,只使用“id”字段(从对象到对象的唯一)来计算哈希码。
修改:在评论部分中喜欢Dimitry的建议,如果您要删除字段请尝试:https://projectlombok.org/features/EqualsAndHashCode.html 看起来更干净
答案 1 :(得分:0)
除非绝对必要,否则你不应该重写equals和hashCode方法。
当您需要这样做时,请尝试仅使用制作您的对象的字段" unique"其中。
为了对对象进行排序,您可以查看Comparator or Comparable接口,您可以使用这些接口来比较给定特定字段或一组字段的对象。