繁体   English   中英

C#Equals和GetHashCode

[英]C# Equals and GetHashCode

几天前我遇到了一个求职面试问题:2个C#对象或原始类型对于未被重写的GetHashCode()方法有什么相同的结果,但是Equals() false? 我被引导到原始类型long ,并没有想到解决方案。

规则是如果Equals返回true,则GetHashCode必须返回相同的值,但不是相反。

考虑一下:GetHashCode返回一个int。 Type long具有比Type int更多的可能值。 这意味着多个long值将产生与另一个long值相同的哈希码。 这被称为鸽子洞原则: http//en.wikipedia.org/wiki/Pigeonhole_principle

哈希码是一个32位整数 - 你如何获得每64位长的唯一哈希值?

为了尽可能高效,哈希码应该尽可能唯一。 平等是一个不能被打破的数学规则。

这是数学。 鸽巢原理指出,如果你有101只鸽子放入100个孔,比你不得不把2只鸽子同穴。

如下所示,如果您有2 ^ 64个可能的长度和2 ^ 32个可能的哈希码(signed int),那么您必须获得不同长度的相同哈希码。

那么,既然long为8 byted和int只有4,你可以说会有哈希码碰撞了很多

例如, 54294967300具有相同的哈希码。 这是5。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM