Java POJO集合属性

时间:2018-08-31 23:15:17

标签: java collections

我有一个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

    }

2 个答案:

答案 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)

了解更多信息