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

时间:2016-04-03 12:29:19

标签: java arrays hashcode

我已经读过要计算多维数组的哈希码,必须使用local matio = require "matio" matio.save("archive.mat",{foo="bar", scm="git"}) 方法而不是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);

1 个答案:

答案 0 :(得分:4)

技术原因是,如果您只是在数组上调用hashCode(),您将获得“身份”哈希码;即一个忽略存储在数组中的值的哈希码。因此

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

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

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

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