我一直在尋找各地,但我找不到任何東西。任何人都可以對此有所瞭解嗎?GetHashCode()如何爲Int32實現?
回答
根據反射:
public override int GetHashCode()
{
return this;
}
有道理,不是嗎?
將32位值散列爲32位的最佳方法不是發明輪子,而是使用值本身。非常快,沒有碰撞,確實是一個完美的方式。
是的,但這並不一定意味着它是以這種方式實現的。 :) – 2010-10-08 19:47:11
其實這是一個很好的方式來實現它。每MS「爲了獲得最佳性能,散列函數應該爲所有輸入生成一個均勻分佈,包括大量聚集的輸入,這意味着對對象狀態的小修改會導致對最終散列表的大量修改以獲得最佳散列表性能。」 (http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx)此實現儘管簡單會導致錯誤的集羣,並可能導致糟糕的性能,當整數被用作散列表鍵時。 – 2014-05-07 17:21:14
@JeffWalkerCodeRanger通常這是真的。但是大多數哈希表是通過執行'hashCode%bucketLength'來實現的。因此,'0,1,2,3,...'的常見序列將具有完美的散列碼。但是,如果輸入爲'0,32,64,96,128,...',那麼任何冪的二進制存儲桶大小數組<= 32將具有100%散列衝突。如果MS會改變它來進行一些混洗,那麼會有另一個序列會產生100%的混亂衝突。我的觀點是,沒有上下文的Int32,沒有上下文,你不能做一個好的散列函數。如果您需要散列數據,請編寫您自己的散列器。 – Aidiakapi 2015-04-19 14:36:47
- 1. 你如何在對象上實現GetHashCode()?
- 2. 如果不需要GetHashCode()虛擬實現
- 3. 如何將Int32 *轉換爲Int32?
- 4. SerialPort.Read(byte [],int32,int32)沒有阻塞,但我希望它 - 如何實現?
- 5. 實施的GetHashCode
- 6. 實現GetHashCode的一個值類
- 7. 關於產品的GetHashCode實現
- 8. 實現equals但不是在C#的GetHashCode
- 9. 實現EqualityCompare vs覆蓋GetHashCode和Equals
- 10. 在C#中實現GetHashCode。空值處理
- 11. 基於連接字符串實現GetHashCode
- 12. 如何在C#結構實現GetHashCode()方法
- 13. Equals和GetHashCode如何在匿名類型上實現?
- 14. 具有容差的IEqualityComparer <double>;如何實現GetHashCode?
- 15. C#字符串的GetHashCode()是如何實現的?
- 16. 在T-SQL中爲字符串實現GetHashCode
- 17. 如何從GetHashCode的
- 18. 實體類的GetHashCode()的正確實現是什麼?
- 19. 實行正確的GetHashCode
- 20. 如何區分類型:Int32 []和Int32 [*]?
- 21. 什麼導致GetHashCode的這個實現比.net的實現慢20倍?
- 22. 如何從重新實現GetHashCode的類中獲取原始哈希碼?
- 23. 當空間大於32位時,如何實現兼容GetHashCode的Equals方法?
- 24. 如何讓Json.NET將Int32轉換爲URI
- 25. 將Int32.Maximum +數值轉換爲int32
- 26. 爲什麼在許多GetHashCode實現中xoring之前乘以一個素數?
- 27. 在Object和ValueType類中實現的GetHashCode有什麼區別?
- 28. GetHashCode已實現但字典無法找到密鑰?
- 29. 實現GetHashCode()方法對於包含集合
- 30. 在具有通配符的類上實現GetHashCode Equatability
我想。我在想所有的價值類型都會有一個共同的實現。 – 2010-10-08 19:43:15
不,每個值類型都有自己的值。 UInt32將自己轉換爲Int32,這只是將自己轉換爲簽名的Int。 Int16和Int64做了一些時髦的位移以產生一個32位值。 System.Boolean根據狀態返回0或1。 – 2010-10-08 19:46:43
Interesing,爲什麼然後'int a = 10;'和'int b = 10.GetHashCode();'提供了不同的x86指令。我們看到這種單行方法將被內聯,所以它應該是相同的,但它不是 – 2017-01-15 14:11:11