我有一个POJO,如下所述。在这里,我指的是Set
中的POJO1
集合属性。我了解该集合不包含重复项。我是否需要覆盖equals()
中的hashCode()
和POJO2
方法?除非我们重写equals和hashCode方法,否则在此处使用Set
并没有帮助。请帮助我更多地了解这种情况!
public class POJO1 {
private String name;
private Set<POJO2> pj2;
public Company(){
pj2 = new HashSet<>();
}
//setter and getter methods
}
答案 0 :(得分:1)
是的,Java理解哪些对象重复的唯一方法是调用equals()
方法。 equals()
的默认实现会检查两个对象的引用是否指向内存中的相同位置。
但是根据您Set
的确切实现,您可能需要覆盖hashCode/equals
或实现Comparable
接口。
由于将POJO2
的对象放入HashSet
中,因此需要覆盖hashCode
等于methods in
POJO2`类。
答案 1 :(得分:0)
你喜欢这样
import java.util.Set;
public class POJO1 {
private String name;
private Set<POJO2> pojo2;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<POJO2> getPojo2() {
return pojo2;
}
public void setPojo2(Set<POJO2> pojo2) {
this.pojo2 = pojo2;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
POJO1 pojo1 = (POJO1) o;
if (name != null ? !name.equals(pojo1.name) : pojo1.name != null) return false;
return pojo2 != null ? pojo2.equals(pojo1.pojo2) : pojo1.pojo2 == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (pojo2 != null ? pojo2.hashCode() : 0);
return result;
}
}
在https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#equals(java.lang.Object)
了解更多信息