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