Java POJO集合属性
我有一个类似下面提到的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
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指的是什么?