我已经读过要计算多维数组的哈希码,必须使用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);
答案 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
。在典型情况下,您希望one
和won
的哈希码相等。为此,您需要哈希码计算以包含所有数组元素的值。