Java POJO集合属性

Java POJO集合属性,java,collections,Java,Collections,我有一个类似下面提到的POJO。这里我指的是POJO1中的Set集合属性。据我所知,该集合不包含重复项。是否需要重写POJO2中的equals()和hashCode()方法?除非我们重写equals和hashCode方法,否则在这里使用集并没有真正的帮助?请帮助我了解更多关于这方面的内容 public class POJO1 { private String name; private Set<POJO2> pj2; public

我有一个类似下面提到的POJO。这里我指的是
POJO1
中的
Set
集合属性。据我所知,该集合不包含重复项。是否需要重写
POJO2
中的
equals()
hashCode()
方法?除非我们重写equals和hashCode方法,否则在这里使用
并没有真正的帮助?请帮助我了解更多关于这方面的内容

public class POJO1 {

        private String name;
        private Set<POJO2> pj2;

        public Company(){
            pj2 = new HashSet<>();
        }

        //setter and getter methods

    }
公共类POJO1{
私有字符串名称;
私有集pj2;
上市公司(){
pj2=新的HashSet();
}
//setter和getter方法
}

是的,Java理解哪些对象是重复的唯一方法是调用
equals()
方法。
equals()
的默认实现检查两个对象的引用是否指向内存中的同一位置

但是,根据
集合的具体实现,您可能需要覆盖
hashCode/equals
或实现
Comparable
接口

由于您将
POJO2
的对象放入
HashSet
中,因此需要在
POJO2`类中覆盖
hashCode
equals
方法。

您喜欢这样做吗

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;
    }

}
import java.util.Set;
公共类POJO1{
私有字符串名称;
私有集pojo2;
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共集getPojo2(){
返回pojo2;
}
公共无效集合pojo2(集合pojo2){
this.pojo2=pojo2;
}
@凌驾
公共布尔等于(对象o){
如果(this==o)返回true;
如果(o==null | | getClass()!=o.getClass())返回false;
POJO1 POJO1=(POJO1)o;
if(name!=null?!name.equals(pojo1.name):pojo1.name!=null)返回false;
返回pojo2!=null?pojo2.equals(pojo1.pojo2):pojo1.pojo2==null;
}
@凌驾
公共int hashCode(){
int result=name!=null?name.hashCode():0;
result=31*result+(pojo2!=null?pojo2.hashCode():0);
返回结果;
}
}

了解更多信息,请访问

上述hashCode方法中31指的是什么?