我一直在尝试实现equals和hashCode方法,所以我可以使用arrayList的remove方法。
当我执行以下
Node a = new Node(new Coord(0,0));
System.out.println(a.equals(nodes.get(0)));
System.out.println(nodes.get(0).equals(a));
System.out.println(a.hashCode() == nodes.get(0).hashCode());
System.out.println(nodes.remove(a));
我得到以下输出:
true
true
true
false
问题是,当第 4 个返回 false 时,输出的前 3 个如何返回 true。方法 remove 应该遇到 nodes.get(0) 并将其与 a 进行比较。
这些是我的 equals 和 hashCode 方法:
public int hashCode() {
return coord.hashCode();
}
public boolean equals(Node node) {
return (node != null) && (this.hashCode() == node.hashCode());
}
它调用定义为的方法 coord.hashCode() :
public int hashCode() {
int hash = 23;
hash = 31 * hash + this.x;
hash = 31 * hash + this.y;
return hash;
}