日期:2014-05-20  浏览次数:20752 次

HashSet可以添加重复元素吗?

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;
}
}
输出:
[com.set.C@1bc4459, com.set.C@12b6651, com.set.A@4f1d0d, com.set.B@c3c749, com.set.B@1bab50a, com.set.A@1fc4bec]
C对象的equals和hashcode都改写了啊,两次创建C应该相等啊。应该不能重复放进HashSet啊
------解决方案--------------------
只要使用new关键字去创建对象,就会给该对象分配新的内存地址,也就是说就是一个全新的对象。但是java.lang.Object的hashcode并不代表对象所在内存地址。
------解决方案--------------------
樓主,你應該Override的是

public boolean equals(Object obj) 
public native int hashCode()



而你寫的是
public boolean equals(){//沒參數,這個是overload
return true;
}
public int hashcode(){//你這個方法名寫錯了
return 1;
}