gpt4 book ai didi

java - 定义了 equals 和 hashCode,arrayList 方法仍然不起作用

转载 作者:行者123 更新时间:2023-12-03 00:05:59 25 4
gpt4 key购买 nike

我一直在尝试实现 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

问题是,当第四个返回 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;
}

最佳答案

您当前的 equals() 方法不会覆盖 Object.equals(),而是重载它。

更改equals()以接受Object参数:

public boolean equals(Object o) {
return (o instanceof Node) && (this.hashCode() == o.hashCode());
}

Java 有 @Override您可以在方法上添加注释,以便编译器会告诉您您的方法实际上是否没有覆盖。使用它是一个很好的做法,这样您就可以在编译时避免出现此类问题。

<小时/>

请注意,您的 equals 实现有一个错误:您不应该比较哈希代码 - 两个“不相等”的对象可能(不幸的是)共享相同的哈希代码。

比较字段,而不是哈希码。

关于java - 定义了 equals 和 hashCode,arrayList 方法仍然不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17265599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com