[英]How to avoid collisions using HashCode.Combine?
我在建立具有相當小的數據集(約10萬行)的哈希表時遇到了沖突。 我在這里做錯什么了嗎?
這是一個2位數據的示例,通常會產生相同的哈希值。 (偶爾運行會產生不同的哈希值):
long long1 = 330765;
long long2 = 227691;
DateTime date1= new DateTime(2016, 5, 24);
DateTime date2= new DateTime(2016, 1, 25);
var c1 = HashCode.Combine(long1, date1);
var c2 = HashCode.Combine(long2, date2);
Console.WriteLine(c1);
Console.WriteLine(c2);
與dotnetcore 2.1兼容
您永遠無法完全避免與哈希碼發生沖突(除非類型的可能的獨特值少於2 ^ 32,例如短褲或字節之類的東西)。 編寫良好的哈希只是意味着盡可能地減少沖突。 您可以通過盡最大努力確保哈希碼在(整個) int
范圍內(大約)均勻分布來做到這一點。
您還可以嘗試避免某些通常共同使用的值發生沖突(例如,您可以針對日期創建一種生成算法,以使同一周中的日期不會發生沖突,並確保所有碰撞發生的日期都比該日期更遠) 。
但是,無論何時使用生成的哈希碼,都需要某種機制來處理沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.