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