Java 在特定情况下实现equals/hashcode以检查列表是否为子列表的子集
我知道我应该实现Java 在特定情况下实现equals/hashcode以检查列表是否为子列表的子集,java,oop,arraylist,equals,hashcode,Java,Oop,Arraylist,Equals,Hashcode,我知道我应该实现hashCode()和equals(),但实际上我不知道如何实现。我有以下课程: public class Dog { private Integer id; private Integer age; private Instant dateOfBirth; } 现在,我想检查一些狗的列表是否是另一个狗列表的子集 ArrayList<Dog> 但是,我不知道如何实现hashCode来维护equals hashCode契约?ID不够吗?如果ID对
hashCode()
和equals()
,但实际上我不知道如何实现。我有以下课程:
public class Dog {
private Integer id;
private Integer age;
private Instant dateOfBirth;
}
现在,我想检查一些狗的列表是否是另一个狗列表的子集
ArrayList<Dog>
但是,我不知道如何实现
hashCode
来维护equals hashCode契约?ID不够吗?如果ID对每只狗都是唯一且不可变的,您不需要年龄和出生日期(这里一只取决于另一只,所以如果ID不够,请使用Instant作为更高的保真度)@Tom.Reunick在您的equals方法中,您使用==
来比较Integer
实例。这仅适用于作为整数缓存一部分的值(-128到127)。旁注:除非您希望接受null
,否则请使用int
而不是integer
。如果null是可接受的,则.dateOfBirth.equals
可能会因NPE而崩溃。还不确定==
是否适用于Integer
。有趣的是,在确定一个列表是否是另一个列表的子列表时,将使用hashCode
。这是怎么回事?你对这个算法有什么参考资料吗?
public boolean equals(Dog dog) {
return (dog.id == this.id && dog.age == dog.age && &this.dateOfBirth.equals(dog.dateOfBirth));
}