在具有聚合Arraylist的类中覆盖equals方法



我需要覆盖Java类中的equals()hashCode()方法。但是这个类包含一个对象列表。我应该如何实现代码中与ArrayList字段比较的部分?

代码看起来像:

public class FirstClass {
private List<SecondClass> list = new ArrayList<>();
equals() {
//how i should implement equals for list field?
}
hashCode() {
}
} 

我只能补充一点,SecondClass有工作良好的equalshashCode方法。我知道对称、过渡和其他重要的东西,但我只想用ArrayList场来关注这个问题。

ArrayList(以及任何List实现(需要正确覆盖equalshashCode,如Listjavadoc:中所述

布尔java.util.List.equals(Object o(

将指定的对象与此列表进行相等性比较。当且仅当指定的对象也是一个列表,两个列表的大小相同,并且两个列表中所有对应的元素对都相等时,返回true。(如果(e1==null?e2==null:e1。equals(e2((,则两个元素e1和e2相等。(换句话说,如果两个列表以相同的顺序包含相同的元素,则它们被定义为相等。此定义确保equals方法在List接口的不同实现中正常工作。

int java.util.List.hashCode((

返回此列表的哈希代码值。列表的哈希代码被定义为以下计算的结果:

int hashCode=1
对于(E:list({hashCode=31*hashCode+(E==null?0:E.hashCode(((;}

因此,您只需要调用list.equals()list.hashCode()

public class FirstClass 
{
private List<SecondClass> list = new ArrayList<>();
@Override
public boolean equals(Object other) {
if (this == other)
return true;
if (!(other instanceof FirstClass))
return false;
FirstClass fc = (FirstClass) other;
return list.equals(fc.list);
}
@Override
public int hashCode() {
return list.hashCode ();
} 
}

这是假设list永远不可能是null。否则,必须添加一些附加检查。

最新更新