import java.util.*;
class Name{
private String firstname,secondname;
public Name(String firstname,String secondname){
this.firstname=firstname;
this.secondname=secondname;
}
public String getFirstName(){return firstname;}
public String getsecondName(){ return secondname; }
public String toString(){ return firstname+" "+secondname;}
public boolean equals(Object obj) {
if(obj instanceof Name){
return true;
} return super.equals(obj);
}
public int hashcode(){
return firstname.hashCode();
}
}
public class TestCollection {
public static void main(String[] args) {
Collection c=new HashSet();
c.add("hello");
c.add(new Name("uzi","omg"));
c.add(new Integer(100));
c.remove("hello");
c.remove(new Integer(100));
System.out.println(c.remove(new Name("uzi","omg")));
System.out.println(c);
}
}
程序結果如下//
false
[uzi omg]
重寫了Name 中的equals()結果依然沒變 為何沒有調用Name裡的equals??
之所以你的remove操作失敗,是因為你重新的equals和hashCode不妥當,因為java約定equals和hashCode方法,要求equals返回true時,也一定要有相同的hashCode。
你要重寫equals的話,應該用Eclipse自動生成的方法,保證這一規則成立。
刪除這兩個方法,重新用Eclipse的右鍵-》source-》generate equals() and hashCode()。選擇需要用的屬性,這樣就能remove返回true了。
這篇文章寫的很詳細你可以參考下:http://www.importnew.com/16517.html