如何基于两个唯一的对象属性实现唯一的自定义集合。
假设我有很多自定义对象,我想要一个唯一的集合,其中属性roll
和s_class
一起不应该复制此集合中的任何tow对象。
class Cl {
private int roll;
private String s_class;
private String name;
private Date dob;
}
答案 0 :(得分:1)
正如@nafas所说,你需要使用Hashset来完成你的任务。并在类中实现equals()和hashCode()。只需使用更多指南粘贴我的代码。
public class Cl {
// We should not have setter for these fields
private int roll;
private String s_class;
private String name;
private Date dob;
@Override
public int hashCode(){
return Objects.hash(s_class,roll);
}
@Override
public boolean equals(Object temp){
if(!( temp instanceof Cl) ){
return false;
}
Cl tempObj = (Cl)temp;
String s_classTemp = tempObj.s_class;
if(this.s_class == null && s_classTemp == null){
return true;
}
if(this.s_class == null && s_classTemp != null){
return false;
}
return (tempObj.roll == this.roll) && (this.s_class.equals(tempObj.s_class));
}
}
答案 1 :(得分:-1)
我建议使用Set<C1>
作为您的收藏品
设置不包含duplicates
,因此接下来要确保您的每个C1
都是unique
,然后再将它们添加到您的设置中。
您需要覆盖班级中的hashCode()
和equals(Object o)
方法:
class Cl {
.
.
.
private Integer myHash= null;
@Override
public int hashCode(){
if(myHash!=null){
return myHash;
}
myHash= Objects.hashCode(roll, s_class);
return myHash;
}
@Override
public boolean equals(Object o){
if(o == this){
return true;
}
if(o instanceOf C1){
C1 c1 = (C1) o;
if(c1.s_class==null){
return c1.roll == this.roll && this.s_class == null;
}
else {
return c1.roll == this.roll && c1.s_class.equals(this.s_class);
}
}
}
}