[英]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.