等於我有這個類:實現與套裝
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);
}
}
爲什麼這主要是打印2元,如果我重寫方法等於在ClassA的比較只有名稱?
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!
}
如果我期待進入設置Java documentation:
不包含重複元素的集合。更正式地,集合不包含e1和e2這樣的元素對,使得e1.equals(e2)和至多一個空元素。正如它的名字所暗示的,這個接口模擬數學集抽象。
所以顯然我只需要重寫equals,但是我聽說我也要重寫hashcode,但是爲什麼?
*具有未在等號中使用的ID的諷刺*:[有時](http://community.jboss.org/wiki/EqualsAndHashCode)它是實際上是一個好習慣 –