我正在使用Processing language(派生自Java PApplet)版本3.01
这是我的代码......
Pig a = new Pig(1);
Pig b = new Pig(1);
HashMap<Pig, String> m = new HashMap<Pig, String>();
m.put(a,"foo");
String c = m.get(b);
println(c);
class Pig {
int a;
Pig(int x) { a=x;}
boolean equals(Pig b) { return b.a==a;}
int hashCode() { return a;}
}
正如您所看到我使用Pig作为密钥,我定义了equals和hashCode。我期望输出“foo”,但是,我得到输出null。
知道这里发生了什么吗?为什么这不起作用?
答案 0 :(得分:1)
您没有覆盖equals(Object)
,但您确实实施了不相关的equals(Pig)
方法。 HashMap
使用前者,您的方法甚至不会被调用。
答案 1 :(得分:1)
试试这个,你没有完全覆盖Object方法:
class Pig {
int a;
Pig(int x) {
a = x;
}
@Override
public boolean equals(Object b) {
if(b == null) return false;
if(!(b instanceof Pig)) return false;
if(b == this) return true;
return ((Pig) b).a == a;
}
@Override
public int hashCode() {
return a;
}
}