我正在嘗試下面的一段代碼。java中的地圖和自定義對象
class dog{
private String name;
public dog(String n){
name = n;
}
public String getname(){ return name; }
public void setname(String n){ name =n;}
public boolean equals(Object o){
//if ((o instanceof dog)&& (((dog)o).name == name)) return true;
if ((o instanceof dog)&& (((dog)o).name.equals(name))) return true;
else return false;
}
public int hashcode(){
return name.length();
}
public String toString(){
return "Name:"+name;
}
}
這是我的狗課。現在在Main方法中,我試圖執行以下操作:
Map<Object,Object> m = new HashMap <Object, Object>();
dog p = new dog("GM");
dog q = new dog ("GM");
System.out.println(p.equals(q));
m.put (new dog("GM"),"K2");
System.out.println(m.get(new dog("GM")));
我得到一個真值和一個空值。我期待K2而不是null。有人能幫我解決這個問題嗎?我重寫了hashcode和equals方法。我錯過了什麼?
編輯: - 改變了等於函數。相同的結果。
等值方法中的狗類中的字符串值比較不正確。 – MouseLearnJava
你用過(((dog)o).name == name))。實際上,它應該使用(((dog)o).name.equals(name)。請先改變它,然後再進一步檢查。 – MouseLearnJava
改變你的hashCode返回'name.hashCode()'而不是'name.length )',你正在使用其中的一個哈希函數,它不會返回負數,並且它很少使用大數字。 –