【发布时间】:2014-04-20 07:58:49
【问题描述】:
感觉默认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)。
【问题讨论】:
-
整数数组?您可以使用任何散列算法,例如 MurmurHash3
-
hash = primeNumber * hash + currentElement.hashCode();
-
这个哈希结果被用作HashMap中的key。它必须是一个整数。所以我不能使用像 SHA 这样的高级 Hash 算法。
-
这个数组可以有任何类型的元素。 integer、String、Double、boolean 等......不仅是 Integer。
-
hoaz:求素数模数和随机性,否则太容易坏了:)
标签: java arrays algorithm hash