gpt4 book ai didi

Java hashCode 不适用于 HashMap?

转载 作者:行者123 更新时间:2023-11-29 08:31:45 25 4
gpt4 key购买 nike

我正在尝试使用 HashMap 实现稀疏网格,但是覆盖 hashCode() 似乎并不像我期望的那样有效。我已将我的问题归结为以下代码:

public class Main {

private static class Coord {
int x, y;

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

@Override
public int hashCode() {
// See https://en.wikipedia.org/wiki/Pairing_function#Cantor_pairing_function
return (((x + y) * (x + y + 1)) / 2) + y;
}
}

public static void main(String[] args) {
HashMap<Coord, String> grid = new HashMap<Coord, String>();
grid.put(new Coord(0, 0), "A");
System.out.println(grid.get(new Coord(0, 0)));
}
}

我期望输出是:

A

但是,输出是:

null

两个“new Coord(0, 0)”实例都应该返回相同的 hashCode(),但它似乎并没有像我预期的那样工作。为什么它不像我预期的那样工作?

最佳答案

A HashMap无法在 hashCode 上工作独自的。它依赖于 equals

为了解释原因,让我们考虑一个 HashMap<String, ?> .假设一秒钟有无限内存,可以为这个映射创建无限数量的键,但只有 430 万左右可能的哈希码(可能的数量 int s)。因此,会发生碰撞。这就是为什么 equals是必需的,以确保我们获得正确 key 的值。

关于Java hashCode 不适用于 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47480775/

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