gpt4 book ai didi

java - 如何比较集合中包含的对象?什么是好的哈希码和等于这里的实现?

转载 作者:行者123 更新时间:2023-11-29 04:12:51 25 4
gpt4 key购买 nike

import java.util.*;

public class Tester
{
public static void main(String args[])
{
Set<Point> set = new HashSet<Point>();
Point A = new Point(0, 0);
set.add(A);
Point B = new Point(0, 0);
System.out.println(set.contains(B));
}
}

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

public boolean equals(Object o)
{
// Not sure/
}

public int hashcode()
{
// Not sure?
}
}

我正在使用 Point 对象来表示二维矩阵的每个单元格。对于 DFS,我需要将节点标记为已访问。但是,尽管代码具有值为 (0, 0) 的对象,但它返回 false。我认为这可能需要哈希码和 equals 实现,因为默认情况下 equals() 查找对象引用。

所以我的问题是,这里什么是好的哈希码和等于实现?1. x和y没有约束。2. x 和 y 最多为 1000。

最佳答案

你的 equals方法应返回 true当且仅当两个对象都是 Point 的实例时并且两者具有相同的 xy值(value)观:

@Override
public boolean equals(Object o)
{
if (o == this)
return true;
if (!(o instanceof Point))
return false;
Point other = (Point) o;
return this.x == other.x && this.y == other.y;
}

对于 hashCode ,您可以使用辅助方法:

@Override
public int hashCode()
{
return Objects.hash(x,y);
}

编辑:使用 @Override注释是可选的,但它可以避免打字错误,例如 hashcode而不是 hashCode .

关于java - 如何比较集合中包含的对象?什么是好的哈希码和等于这里的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53993657/

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