计算多维数组的哈希码时使用 Arrays.deepHashCode() 的技术原因

Technical reasons behind using Arrays.deepHashCode() when calculating hashcode for multidimensional array

我读到要计算多维数组的哈希码,必须使用 Arrays.deepHashCode() 方法而不是 Arrays.hashCode() 方法,但我不太了解其背后的技术原因。有人可以给我解释一下吗?

    Object[][] one = {
        {1, 2, 3},
        {11, 22, 33}
    };
    int two = Arrays.deepHashCode(one);
    int three = Arrays.hashCode(one);
    System.out.println("two " + two);
    System.out.println("three " + three);

结果:

two 997365
three 312355675

技术上的原因是,如果你简单地调用数组 hashCode(),你将得到一个 "identity" 哈希码;即忽略存储在数组中的值的哈希码。于是

Object[][] one = {
    {1, 2, 3},
    {11, 22, 33}
};

Object[][] won = {
    {1, 2, 3},
    {11, 22, 33}
};

println(won.hashCode() == one.hashCode());

将打印 false。在典型情况下,您会希望 onewon 的哈希码相等。为此,您需要哈希码计算以包括所有数组元素的值。