class A {
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 A());
set.add(new A());
set.add(new A());
System.out.println(set.size());
}
}
这段程序运行的结果是:1,为什么啊?创建的三个A的对象它们的地址不是不一样吗
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 A());
set.add(new A());
set.add(new A());
System.out.println(set.size());
}
}
这段程序运行的结果是:1,为什么啊?创建的三个A的对象它们的地址不是不一样吗
使得任何两个对象都是相等的所以set里无论装多少个对象他的大小只能为1
你重复添加那几个对象。。都被最后一个覆盖掉了。。就剩一个哇
重复的元素,而Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,
你三个对象的地址是不一样,但他们的值是一样的,就是说三个对象是相同的,相当于一个对象;
HashSet 判读元素相等的规则是:hashCode返回值一样而且equals返回true/这两个条件同时满足是判读相等的标准
<<疯狂java讲义>>对集合的讲解很清晰哦.
import java.util.*;
public class A {
private static int i = 1;
public int hashCode() {
return (i++)*32 + 1;
} public boolean equals(Object b) {
return true;
} public static void main(String args[]) {
Set set = new HashSet();
set.add(new A());
set.add(new A());
set.add(new A());
System.out.println(set.size());
}
}