我有一个Set<Long>
,并且我想创建一个表示 this 的所有值的散列Set
。我将把这个哈希值存储在一个文件中以便稍后进行比较,而不是原始的 Object. 我想知道所有这些值hashCode()
可能产生的冲突。long
在这里使用hashCode()
正确,还是应该使用其他散列算法?
编辑:我没有比较等于的对象。我应该说我正在寻找一个哈希,因为我不存储原件。
你不必担心,hashCode()
它只是用来确定对象将被放入的“bin”。碰撞没问题。如果多个对象具有相同的哈希码,那么它们将被放入同一个 bin。检索对象时,软件再次使用哈希码获取 bin,然后遍历该 bin 中的元素列表并使用该equals()
方法找到正确的对象。
事实上,大多数情况下,Hash 只有几个 bin,因此可能会有数千个 hashcode 被放入同一个 bin。
这一切都由 HashMap 或 HashSet 为您完成,因此您不必担心。
回答更新后的问题:根据您希望使用此哈希值的目的,您可能不想使用 hashcode()。
相反,您可能想要使用校验和算法,例如 MD5 或 SHA-1。
是的,您应该始终覆盖 equals() 和 hashCode(),尤其是当您要将对象存储在 HashMap 或任何其他类型的字典类型结构中时。