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的对象它们的地址不是不一样吗

解决方案 »

  1.   

    set方法不能含有重复元素 对象是否重复是由它的equals方法决定的 你重写了它的equals方法返回true
    使得任何两个对象都是相等的所以set里无论装多少个对象他的大小只能为1 
      

  2.   

    set中是不允许有重复得值出现得
    你重复添加那几个对象。。都被最后一个覆盖掉了。。就剩一个哇
      

  3.   

    Set接口和List接口都继承Collection接口,List是有序的Collection,允许有
    重复的元素,而Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,
    你三个对象的地址是不一样,但他们的值是一样的,就是说三个对象是相同的,相当于一个对象;
      

  4.   

    二楼的讲得很确切,去掉了重写的equals方法那么打印的结果就是3了
      

  5.   

    二楼说得还不完全正确...
    HashSet 判读元素相等的规则是:hashCode返回值一样而且equals返回true/这两个条件同时满足是判读相等的标准
    <<疯狂java讲义>>对集合的讲解很清晰哦.
      

  6.   

    给你看看效果...
    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());
        }
    }