簡體   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