我觉得默认的Java Arrays.deepHashCode算法存在问题:
我尝试了以下代码:
Integer[] a1 = { 2, 1 };
Integer[] a2 = { 1, 32 };
System.out.println("deepHash a1:" + Arrays.deepHashCode(a1) + " a2:" + Arrays.deepHashCode(a2));
输出结果为:
deepHash a1:1024 a2:1024
我在我的应用程序中发现,当两个元素数组的第一个元素很小(例如1或2)时,Arrays.deepHashCode会产生大量的碰撞。
有没有人知道更好的数组哈希算法?我的意思通常比Arrays.deepHashCode更好。
数组可以包含任何类型的元素。整数,字符串,双精度,布尔值等....不仅仅是整数。该数组可以包含任意数量的元素。我需要一个函数来替换Arrays.deepHashCode(Object []),使用相同类型的参数(Object [])并给出相同类型的输出(int)。
答案 0 :(得分:0)
临时解决方案是将数组加倍然后散列。
Integer[] a1 = { 2, 1, 2, 1 };
Integer[] a2 = { 1, 32, 1,32 };
不会引起冲突。您可以使用System.arraycopy()自动执行复制。