【发布时间】:2015-11-01 21:30:06
【问题描述】:
我正在使用处理语言(源自 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。
知道这里发生了什么吗?为什么这不起作用?
【问题讨论】:
-
您没有将
b添加到 HashMap。因此,即使 HashMap 中有另一个对象,也无法检索它,equals方法返回 true。 -
你没有覆盖equals。
-
@hotzst :这正是他想要做的,在不添加 b 的情况下得到“foo”,因为 a 和 b 应该被认为是相等的。
-
HashMap 仅将 hashCode 用作其散列算法的一部分。因此,即使在 HashMap 中具有相同
hashCode的相等元素也不会落在同一个桶中。见stackoverflow.com/questions/6493605/…
标签: java hashmap processing