什么时候会希望GetHashCode()发生冲突?

本文关键字:冲突 希望 GetHashCode 什么时候 | 更新日期: 2023-09-27 18:16:53

是否存在哈希码冲突有益的情况?

(当然,对象相同时除外)

编辑:有益的意思是在更少的cpu周期内计算哈希码,或者在计算中使用更少的内存。

我想一个澄清将是:如果一个特定的GetHashCode()是10倍快,但它也导致两倍(例如)的碰撞,值得吗?

什么时候会希望GetHashCode()发生冲突?

"有益"是一个难以量化的术语,特别是在这种情况下。这取决于你对有益的定义。

如果你在检查对象是否相等,它们碰撞了,但对象不相同,那么这将是无益的。

如果您正在构建hashmap,那么您可能在实现中内置了特定的机制来处理这些情况。我相当确定大多数(如果不是全部)现代hashmap实现都是这样做的。

你也可以说有很多附加的好处,比如你可能是一名数学家或安全研究人员,你想展示GetHashCode()中使用的算法的强度(或缺乏强度)。或者你想给出一个很好的概念证明,说明为什么微软应该雇佣你加入。net团队。

总的来说,你的问题很模糊。如果你有特别的疑问,你应该重新思考/修改你的问题。

要回答您的问题,首先需要了解哈希码的用途。哈希码是一个快速"预测试",用于检查两个对象是否相等。

那么是否存在碰撞有益的情况呢?

是的,如果在生成哈希码的过程中,你花费了相对大量的时间来创建一个更独特的哈希码,那么生成哈希码的开销可能会超过拥有一个更独特的哈希码所带来的好处。


要解决您的最新编辑,判断它是否值得的唯一方法是在您的实际数据中尝试这两种方法,并查看两者的比较情况。做一个人工的头对头基准测试不会给你任何有意义的信息,像哈希码查找这样的事情太依赖于它正在处理的数据。