HashMap 不适用于用户定义的键 class
HashMap doesn't work with user defined key class
我正在使用处理语言(派生自 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。
知道这里发生了什么吗?为什么这不起作用?
您没有覆盖 equals(Object)
,但您确实实现了一个不相关的 equals(Pig)
方法。 HashMap
使用前者,你的方法甚至都没有被调用。
尝试一下,您根本没有/正确地覆盖对象方法:
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;
}
}
我正在使用处理语言(派生自 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。
知道这里发生了什么吗?为什么这不起作用?
您没有覆盖 equals(Object)
,但您确实实现了一个不相关的 equals(Pig)
方法。 HashMap
使用前者,你的方法甚至都没有被调用。
尝试一下,您根本没有/正确地覆盖对象方法:
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;
}
}