【发布时间】:2011-03-17 12:36:56
【问题描述】:
在以下情况下,与下面的函数发生 HashCode 冲突的可能性有多大。
- key[0],key[1],key[2],key[3] 的随机 int 值
- 具有以下约束的随机键值
- 键[0]
- 键[1]
- 键[2]
- 键[3]
假设我们有 1000 万个对象。
int[] key=new int[4];
public override int GetHashCode()
{
// Use large prime multiples to create a unique hash key
// Create the hash offsets using a "even powers of 2 minus 1" method, which gives
// primes most of the time.
int hashKey = 0;
hashKey += 2047 * key[0];
hashKey += 8191 * key[1];
hashKey += 32767 * key[2];
hashKey += 131071 * key[3];
return hashKey;
}
【问题讨论】:
-
不。现实生活。那是我们的哈希函数,我们现在正试图解决更大的问题。试图评估这将是一个多大的问题。
-
在什么情况下.NET内置的GetHashCode()不足?我从未发现无法正确区分对象的问题。
-
@Tejs 内置的
GetHashCode是基于引用相等(当然仅适用于引用类型)。如果你想要价值平等,你需要覆盖它(连同.Equals)。所以我真的不明白你在说什么。 -
我只是好奇,因为我从未见过需要它的示例。这也是我不回答的原因,因为我很好奇答案。
-
@derdo 您可以考虑使用
Tuple<int,int,int,int>。不确定它是否符合您的需要。
标签: c# data-structures hashcode