为大量值列表创建哈希

时间:2013-08-29 20:09:18

标签: java hash

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

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

3 个答案:

答案 0 :(得分:3)

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

事实上,大多数情况下,Hash只有几个分区,因此可能会有数千个哈希码被放入同一个分区。

这一切都是由HashMap或HashSet为您完成的,所以您不必担心它。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

是的,你应该总是覆盖equals()和hashCode(),特别是如果你要将对象存储在HashMap或任何其他类型的字典类型结构中。