运行结果是1, 为什么不是3?
import java.util.HashSet;
import java.util.Set;public class TestSet {
public int hashCode(){
return 1;
}
public boolean equals(Object b){
return true;
}
public static void main(String[] args){
Set set=new HashSet();
set.add(new Test());
set.add(new Test());
set.add(new Test());
System.out.println(set.size());
}
}
import java.util.HashSet;
import java.util.Set;public class TestSet {
public int hashCode(){
return 1;
}
public boolean equals(Object b){
return true;
}
public static void main(String[] args){
Set set=new HashSet();
set.add(new Test());
set.add(new Test());
set.add(new Test());
System.out.println(set.size());
}
}
因为你的类中重写了hashCode()方法,并且每次返回都一样,所以在Set中只能存放一个。有关HashSet的详细信息请查看源代码!!!或API文档
import java.util.Set;public class Test{
private int i;
public Test(int i){
this.i = i;
}
public int hashCode(){
return 1;
}
public boolean equals(Object b){
return true;
}
public static void main(String[] args){
Set set=new HashSet();
set.add(new Test(1));
set.add(new Test(2));
set.add(new Test(3));
System.out.println(set.size());
}
}
执行结果还是:1
因为你重写了equals方法,每次添加时,调用此equals方法比较,可是此方法只返回真,也就是不管添加的对象是否相同都认为是相同的,所以不进行添加了,Set内只有对象new Test(1)的引用。没有new Test(2),new Test(3)的引用。
Set的定义可以看文档
System.out.println(set.add(new Test(1)));
System.out.println(set.add(new Test(2)));
System.out.println(set.add(new Test(3)));结果true
false
false你把对象的身份标识重写
public int hashCode(){
return 1;
}
public boolean equals(Object b){
return true;
}
所以HashSet认为它们是重复的对象,所以后面两次添加失败。size = 1