gpt4 book ai didi

java - Java中的HashMap是如何使用equals()和hashCode()来查找对象的?

转载 作者:搜寻专家 更新时间:2023-11-01 01:49:08 24 4
gpt4 key购买 nike

我定义了一个 Point 类,如下所示,覆盖了 equals()hashCode()。我原以为在 main() 方法中会打印“Key Found”,但事实并非如此。

据我了解,Java 使用 equals()hashCode()HashMap 中添加或查找对象。我不确定我在这里做错了什么。

import java.util.*;

public class Point {
int row = 0;
int col = 0;

public Point(int row, int col) {
this.row = row;
this.col = col;
}

public String toString() {
return String.format("[%d, %d]", row, col);
}

public boolean equals(Point p) {
return (this.row == p.row && this.col == p.col);
}

public int hashCode() {
return 31 * this.row + this.col;
}

public static void main(String[] args) {
HashMap<Point, Integer> memo = new HashMap<>();
Point x = new Point(1, 2);
Point y = new Point(1, 2);
memo.put(x, 1);

if (x.equals(y))
System.out.println("x and y are equal");

System.out.println("Hashcode x= " + x.hashCode() + " Hashcode y= " +
y.hashCode());

if (memo.containsKey(y)) {
System.out.println("Key found");
}
}
}

output
x and y are equal
Hashcode x= 33 Hashcode y= 33

最佳答案

问题是您实际上并没有覆盖 equals() 方法。 equals() method that you are trying to overrideObject 作为参数,而不是 Point 对象。因此,实际上并未调用您实现的 equals() 方法。

关于java - Java中的HashMap是如何使用equals()和hashCode()来查找对象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50694082/

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