你什么时候想要GetHashCode()碰撞?

时间:2014-08-06 21:20:45

标签: c# hashcode gethashcode

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

(当然,除了对象相同时。)

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

我想澄清一下:如果某个GetHashCode()的速度提高了10倍,但它也会导致两次(例如)多次碰撞,是否值得呢?

2 个答案:

答案 0 :(得分:2)

要回答您的问题,您首先需要了解哈希代码的用途。哈希码是 fast “预测试”,用于检查两个对象的相等性。

那么碰撞是否有益?

是的,如果在生成哈希代码的过程中,您花费相对大量的时间来创建更独特的哈希代码,那么该代的开销可能不仅仅是您拥有更独特的哈希所带来的好处。


要解决您的最新编辑问题,了解它是否值得的唯一方法是使用您的实际数据尝试两种方法,并查看两者的比较方式。做一个人为的头对头基准测试不会给你任何有意义的信息,像哈希码查找这样的东西过分依赖于它正在使用的数据。

答案 1 :(得分:1)

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

如果您正在检查对象是否相等并且它们发生碰撞但对象不一样,那么这将不会有益。

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

你也可以说有很多附加好处,比如你是数学家或安全研究员,你想要显示GetHashCode()中使用的算法的强度(或缺乏) 。或者,您可能想要提供一个很好的概念验证,以解释为什么Microsoft应该聘请您参加.NET团队。

总的来说,你的问题很模糊。如果你想知道具体的东西,你应该重新考虑/编辑你的问题。