java实现与集合相等
我有这门课:
private static class ClassA{
int id;
String name;
public ClassA(int id, String name){
this.id= id;
this.name = name;
}
@Override
public boolean equals(Object o) {
return ((ClassA)o).name.equals(this.name);
}
}
如果我覆盖ClassA中的方法equals,只比较名称,为什么这个main会打印2个元素
public static void main(String[] args){
ClassA myObject = new ClassA(1, "testing 1 2 3");
ClassA myObject2 = new ClassA(2, "testing 1 2 3");
Set<ClassA> set = new HashSet<ClassA>();
set.add(myObject);
set.add(myObject2);
System.out.println(set.size()); //will print 2, but I want to be 1!
}
如果我查看集合Javadocumentation:
不包含重复元素的集合。更正式地说,集合不包含一对元素e1和e2,因此e1。等于(e2),最多一个空元素。正如它的名字所暗示的,这个接口为数学集合抽象建模
显然我只需要重写equals,但是我听说我还需要重写hashcode,但是为什么呢
# 1 楼答案
因为你也没有覆盖
hashCode()
http://download.oracle.com/javase/6/docs/api/java/util/Collection.html
以及:
http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#hashCode()