碰到這樣一個問題,我在用hashmap的時候,map.containsKey(key)
我希望調用的是自己的equals方法,但是map就是不肯調用我的equals
後來解決了,因為hashmap用的是hash演算法,equals比較特別
除了寫equals,還要寫一個
public int hashCode() ...{
// TODO Auto-generated method stub
return key1.hashCode()+key2.hashCode();
}
把equals中需要的值的hashcode返回出來
下面是一個執行個體
public class Keys implements Serializable...{
String key1;
String key2;
/** *//**
* @return Returns the key1.
*/
public String getKey1() ...{
return key1;
}
/** *//**
* @param key1 The key1 to set.
*/
public void setKey1(String key1) ...{
this.key1 = key1;
}
/** *//**
* @return Returns the key2.
*/
public String getKey2() ...{
return key2;
}
/** *//**
* @param key2 The key2 to set.
*/
public void setKey2(String key2) ...{
this.key2 = key2;
}
public boolean equals(Object obkey)
...{
Keys key=(Keys)obkey;
if(key==null||key.getKey1()==null||key.getKey2()==null)
return false;
if(key.getKey1().equals(this.key1)&&key.getKey2().equals(this.key2))
return true;
return false;
}
public String toString()
...{
String m="key1:"+this.key1+" key2:"+this.key2;
return m;
}
/**//* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
public int hashCode() ...{
// TODO Auto-generated method stub
return key1.hashCode()+key2.hashCode();
}
}