【发布时间】:2017-03-17 13:16:41
【问题描述】:
我有整数数组,例如
[1, 3, 5],
[7, 2, 10],
[50, 12, 10],
[20, 1, 34],
我正在尝试创建一个散列算法,给定其中一个数组将为每个数组返回一个唯一的散列,以便我可以快速查看它们是否存在于 HashMap 中。
如果两个数组包含相同的一组数字并且数组中的最后一个数字相同,则哈希应该相同。
例如
// these are the same because they contain the same numbers and have same last number (5)
Hash([3, 1, 5]) -> 5678326
Hash([1, 3, 5]) -> 5678326
// different hash because the last number in the array is different
Hash([5, 1, 3]) -> 9877124
// different hash because different set of values
Hash([7, 1, 5]) -> 2123466
数组中的值在 0 - 100 范围内,它们都是唯一的(因此数组中不能有重复项),数组的最大大小为 100。
什么是真正好的散列算法?
【问题讨论】:
-
这似乎并不特定于 Java 语言。另外,到目前为止,您尝试过做什么?
-
好的,所以将前两个与一个交换函数结合起来(所以它们的顺序无关紧要),然后将它与最后一个结合起来。
-
您所描述的需要是哈希码。哈希码不必保证唯一——只是不太可能产生冲突。
-
如果您这样做是为了将您的值用作 JDK 的
HashMap中的键,那么哈希码将毫无用处,除非您也按照相同的方式实现equals()。 -
从问题看来,您使用错误的数据结构来存储您的值。为什么不创建一个包含
Set<Integer>(或Multiset<Integer>)和单独的int的类并正常实现equals()和hashCode()?