Java 具有聚合Arraylist的类中的Overide equals方法

Java 具有聚合Arraylist的类中的Overide equals方法,java,arraylist,equals,aggregation,hashcode,Java,Arraylist,Equals,Aggregation,Hashcode,我需要重写Java类中的equals()和hashCode()方法。但是这个类包含一个对象列表。我应该如何通过比较ArrayList字段来实现代码部分 代码如下所示: public class FirstClass { private List<SecondClass> list = new ArrayList<>(); equals() { //how i should implement equals for list fiel

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

代码如下所示:

public class FirstClass {

      private List<SecondClass> list = new ArrayList<>();

      equals() {
      //how i should implement equals for list field?
      }

      hashCode() {
      }
    } 
公共类第一类{
私有列表=新的ArrayList();
等于(){
//我应该如何为列表字段实现equals?
}
hashCode(){
}
} 
我只能补充一点,
SecondClass
具有良好的
equals
hashCode
方法。 我知道对称、转换和其他重要的事情,但我只想关注
ArrayList
字段的这个问题。

ArrayList
(以及任何
列表
实现)需要正确覆盖
equals
hashCode
,如
列表
javadoc:

布尔java.util.List.equals(对象o)

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

int java.util.List.hashCode()

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

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

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

公共类第一类
{
私有列表=新的ArrayList();
@凌驾
公共布尔等于(对象其他){
if(this==其他)
返回true;
如果(!(第一类的其他实例))
返回false;
一级fc=(一级)其他;
返回列表等于(fc.list);
}
@凌驾
公共int hashCode(){
return list.hashCode();
} 
}

这是假设
list
永远不能为
null
。否则,必须添加一些额外的检查。

我知道,但SecondClass指定了equals()方法。所以我应该使用SecondClass的equals方法来比较列表对象。我不想使用ArrayList默认方法。使用将使比较为空安全。同样,我会使用
对象。hashCode()
@Adigs
ArrayList
's
equals
将为
列表的每个元素调用您的
SecondClass
's
equals
。好的,现在我明白了:)谢谢大家!
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 ();
    } 
}