我读过要计算多维数组的哈希码,必须使用 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()
,您将获得一个“身份”哈希码;即忽略存储在数组中的值的哈希码。因此
Object[][] one = {
{1, 2, 3},
{11, 22, 33}
};
Object[][] won = {
{1, 2, 3},
{11, 22, 33}
};
println(won.hashCode() == one.hashCode());
将打印 false
。在典型情况下,您会希望 one
和 won
的哈希码相等。为此,您需要计算哈希码以包括所有数组元素的值。
关于java - 计算多维数组的哈希码时使用 Arrays.deepHashCode() 的技术原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36385420/