Java hashCode 不适用于 HashMap?



我正在尝试使用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

"新坐标(0,0)"实例都应返回相同的哈希码(),但似乎没有我的期望。为什么它不正如我所期望的?

a HashMap不能单独使用hashCode。它也依靠equals

解释原因,让我们考虑一个HashMap<String, ?>。假设一个人具有无限内存,可以为此地图创建无限数量的键,但只有430万左右的哈希码(可能的int s的数量)。因此,会有碰撞。这就是为什么需要equals才能确保我们获得正确的密钥的值。

相关内容

  • 没有找到相关文章

最新更新