java中的地图和自定义对象

时间:2013-10-29 02:59:06

标签: java hashmap

我正在尝试以下代码。

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")));

我得到一个true和null值。我期待K2而不是null。有人可以帮我这个。我重写了hashcode和equals方法。我错过了什么?

编辑: - 改变了等于功能。相同的结果。

1 个答案:

答案 0 :(得分:3)

当前问题是hashCode需要大写C,您正在使用小写hashcode实施c

((dog)o).name == name比较字符串的标识。这意味着如果您有两个字符串"GM"的实例,它们将.equals()彼此相对,而不是==