[英]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,你可以说会有哈希码碰撞了很多 。
例如, 5和4294967300具有相同的哈希码。 这是5。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.