假設我有下面的類。以哈希值爲基礎的對象抽取集合
class S{
String txt = null;
S(String i){
txt=i;
}
public static void main(String args []){
S s1 = new S("a");
S s2 = new S("b");
S s3 = new S("a");
Map m = new HashMap();
m.put(s1, "v11");
m.put(s2, "v22");
m.put(s3, "v33");
System.out.println(m.size());
}
//just a plain implementation
public boolean equals(Object o)
{
S cc = (S) o;
if (this.i.equals(cc.i))
{
return true;
}
else
{
return false;
}
}
public int hashCode()
{
return 222;
}
}
這會在上面運行時返回大小爲2。它完全好。如果我們評論hashCode(),它返回3,這也是正確的。但是如果我們評論equals並保留hashCode,它應該返回2對嗎?相反,它返回3.當把對象放到hashmap map中時,會檢查一個對象的哈希碼,如果它相同,它會將之前的地圖值替換爲新的哈希值。
謝謝。