0

我有一个Set<Long>,并且我想创建一个表示 this 的所有值的散列Set。我将把这个哈希值存储在一个文件中以便稍后进行比较,而不是原始的 Object. 我想知道所有这些值hashCode()可能产生的冲突。long在这里使用hashCode()正确,还是应该使用其他散列算法?

编辑:我没有比较等于的对象。我应该说我正在寻找一个哈希,因为我不存储原件。

4

3 回答 3

3

你不必担心,hashCode()它只是用来确定对象将被放入的“bin”。碰撞没问题。如果多个对象具有相同的哈希码,那么它们将被放入同一个 bin。检索对象时,软件再次使用哈希码获取 bin,然后遍历该 bin 中的元素列表并使用该equals()方法找到正确的对象。

事实上,大多数情况下,Hash 只有几个 bin,因此可能会有数千个 hashcode 被放入同一个 bin。

这一切都由 HashMap 或 HashSet 为您完成,因此您不必担心。

于 2013-08-29T20:13:55.547 回答
1

回答更新后的问题:根据您希望使用此哈希值的目的,您可能不想使用 hashcode()。

相反,您可能想要使用校验和算法,例如 MD5 或 SHA-1。

于 2013-08-29T20:59:27.373 回答
0

是的,您应该始终覆盖 equals() 和 hashCode(),尤其是当您要将对象存储在 HashMap 或任何其他类型的字典类型结构中时。

于 2013-08-29T20:13:00.167 回答