gpt4 book ai didi

java - 对对象覆盖等于,以便反向对也相同

转载 作者:行者123 更新时间:2023-11-30 02:24:47 27 4
gpt4 key购买 nike

我想定义一个 Pair 类,其中 <2,3> 和 <3,2> 是同一件事。 equal 方法被重写,但我不确定如何重写 hashcode 函数以匹配它。到目前为止我的代码是:

 Set<Pair> edgePairs=new HashSet<>();

edgePairs.add(new Pair(2,3));
edgePairs.add(new Pair(2,4));
edgePairs.add(new Pair(2,5));
edgePairs.add(new Pair(4,2));
edgePairs.add(new Pair(2,3));
edgePairs.add(new Pair(3,2));

for (Pair edgePair : edgePairs) {
System.out.println(edgePair.x+" "+edgePair.y);
}

输出:

2 3
2 4
2 5
4 2
3 2

正确的输出不应包含<4,2>和<3,2>对

配对类别:

 public class Pair
{
int x, y;

public Pair(int x, int y) {
this.x = x; this.y = y;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Pair that = (Pair) o;
if ((x == that.y && y == that.x)||(x == that.x && y == that.y))
return true;

return false;
}

@Override
public int hashCode() {
int result = x; result = 31 * result + y;
return result;
}
}

最佳答案

如果您只是让 hashCode 返回 x + y,而不将其中任何一个乘以 31,那么参数的顺序并不重要。

关于java - 对对象覆盖等于,以便反向对也相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45928822/

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