【发布时间】:2018-06-20 18:25:34
【问题描述】:
为什么Arrays.deepHashCode() 不是唯一的?如何生成数组的唯一哈希?
int[][] array1 = { { 8, 7, 4 }, { 3, 6, 5 }, { 0, 2, 1 } };
int[][] array2 = { { 8, 4, 0 }, { 6, 7, 5 }, { 3, 2, 1 } };
System.out.println("Hash array1 " + Arrays.deepHashCode(array1));
System.out.println("Hash array2 " + Arrays.deepHashCode(array2));
?!
Hash array1 37308160
Hash array2 37308160
【问题讨论】:
-
"为什么
Arrays.deepHashCode()不是唯一的?" - 为什么应该这样?附带说明一下,您将多个ints 映射到一个int,因此不能保证它是唯一的。 -
哈希码不能保证是唯一的,事实上由于pigeonhole principle,它不能是唯一的。换句话说:没有唯一的哈希码,你想要的也是不可能的。
-
您可以相当轻松地编写自己的深度哈希码方法,该方法更有可能为两个大小相等但不同的二维小数数组生成不同的哈希码。