Java 具有聚合Arraylist的类中的Overide equals方法
我需要重写Java类中的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
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()
@AdigsArrayList
'sequals
将为列表的每个元素调用您的SecondClass
'sequals
。好的,现在我明白了:)谢谢大家!
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 ();
}
}