1.自定义对象重写hashCode值,因为用set.add方法添加自定义对象时,会将hashCode值作为是否为同一个对象的凭证。重写hashcode值,将自定义对象中,一个唯一值的属性作为hashcode值返回出去,在调用set.add方法时,则会以自定义对象唯一属性值来作为是否为重复对象的判断。
import java.util.HashSet;
import java.util.Set;
public class TestSet {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TestSet(){
}
public TestSet(Integer id,String name){
this.id = id;
this.name = name;
}
@Override
public int hashCode() {
return id;
}
@Override
public boolean equals(Object obj) {
TestSet stu=(TestSet) obj;
return this.id==stu.id;
}
public static void main(String args[]){
Set<TestSet> set = new HashSet<TestSet>();
set.add(new TestSet(1,"testset1"));
set.add(new TestSet(1,"testset2"));
System.out.println(set.size());
}
}
2.在用set添加时,直接添加自定义对象可以确定的唯一属性值,只要唯一属性值相同,则认为是同一个对象,可实现去重如
List<TestSet> tsetSetList = new ArrayList<TestSet>();
testSetList.add(new TestSet(1,"testset1"));
testSetList.add(new TestSet(1,"testset2"));
Set<Interget> idSet = new HashSet<Interget>();
for(TestSet testSet :TestSetList){
idset.add(testSet.getId());
}
System.out.println(idSet.size());