public class TestHashSet {
public static void main(String[] args) {
HashSet books=new HashSet();
books.add(new A());
books.add(new A());
books.add(new B());
books.add(new B());
books.add(new C());
books.add(new C());//只有一个C添加成功
print(books);
}}
class A{
public boolean equals(){
return true;
}
}
class B{
public int hashcode(){
return 2;
}
}
class C{
public boolean equals(){
return true;
}
public int hashcode(){
return 1;
}
}

解决方案 »

  1.   

    只要使用new关键字去创建对象,就会给该对象分配新的内存地址,也就是说就是一个全新的对象。但是java.lang.Object的hashcode并不代表对象所在内存地址。
      

  2.   

    樓主,你應該Override的是public boolean equals(Object obj) 
    public native int hashCode()而你寫的是
    public boolean equals(){//沒參數,這個是overload
    return true;
    }
    public int hashcode(){//你這個方法名寫錯了
    return 1;
    }