将数组散列为整数

时间:2015-07-04 00:26:11

标签: java arrays hashcode

我有一个从int [2]数组到权重的映射。所以[2,3] - > 5,[4,5] - > 6等。使用HashMap是一个可行的策略我在哪里做h.put(Arrays.deepHashCode(a),w)?我有大量的数据,我希望能够快速查找给定坐标x,y的权重。我看到错误,其中h.get(hashcode)似乎在以后返回我意想不到的值。不总是偶尔。这可能是[x,y]和[a,b]偶尔会有相同的deepHashCode()这一事实的假象吗?我会尝试将其归结为一小段代码,但目前很难找出这个问题。

编辑: 我解决了这个问题。结果是Arrays.deepHashCode([2,74])与Arrays.deepHashCode([3,43])相同[都在我的系统上返回1097]。我错误地认为get()会为我解决冲突..但它不能将哈希码映射到值,并且当我执行put()时数组键不再存在。

2 个答案:

答案 0 :(得分:2)

您永远不应该假设哈希码是唯一的。永远记住return 0hashCode()的有效实现。

你应该写一对或一个元组类而不是使用数组或手动输入你不应该认为是唯一的哈希码。

答案 1 :(得分:0)

在地图中使用数组作为键是一个坏主意,因为它们的hashCode实现不是基于它们的内容。您应该使用集合代替您的数组,或者使用包装数组并正确实现equalshashCode的类。