我正在尝试使用 Java 中的 HashMap 检查和删除元素。它的键是我创建的称为 ClusterKey 的类型,它的值是我创建的称为 ClusterValue 的类型。
这是导致问题的代码:
ClusterKey ck = new ClusterKey(Long.parseLong(split[0].split("=")[1]),
Integer.parseInt(split[1].split("ey")[1]));
if (arg == 0) keys.put(ck, new ClusterValue(index, false));
if (arg == 1) {
if (keys.containsKey(ck)) {
index = keys.get(ck).messageNo;
keys.remove(ck);
}
keys.put(ck, new ClusterValue(index, true));
}
问题是即使 ClusterKey 与现有的 ClusterKey 相同, containsKey() 和 remove() 似乎也不认为它是相等的。我在类 ClusterKey 中实现了 equals() 来覆盖 Java 的 equals() 方法,如下:
class ClusterKey {
long firstKey;
int secondKey;
public ClusterKey(long firstKey, int secondKey) {
this.firstKey = firstKey;
this.secondKey = secondKey;
} public boolean equals(Object otherKey) {
return this.firstKey == ((ClusterKey) otherKey).firstKey && this.secondKey == ((ClusterKey) otherKey).secondKey;
}
}
所以,我很困惑。非常感谢你的帮助。
问候,丽贝卡
更新:感谢您对我的代码的建议和反馈。我能够通过将 hashCode() 添加到 ClusterKey 来解决问题,如下所示:
} public boolean equals(Object otherKey) {
return this.firstKey == ((ClusterKey) otherKey).firstKey && this.secondKey == ((ClusterKey) otherKey).secondKey;
} public int hashCode() {
return (int) firstKey + secondKey;
}