可能重复:
hashCode用于什么?这是独特的吗?
我生成了很多字符串,然后我的问题是:
2个不同的字符串可以在C#中使用相同的哈希码吗?
通过哈希码我的意思是:
string s = "Hello";
s.GetHashCode();
Run Code Online (Sandbox Code Playgroud)
我的问题更多的是关于C#遵循生成字符串的算法,也许当所有其他哈希码已经生成或者可能不生成时会发生冲突.有可能有人有这个答案.
Ser*_*rvy 19
是.哈希码不是唯一的.存在2 ^ 32(4,294,967,296)个可能的哈希码(对于32位整数中的每个整数值一个).实际上有无限多个可能的字符串.显然,无数个字符串中的每一个都不可能具有不同数量的有限数.
具有相同哈希码的两个不同字符串(或任何值)被称为"冲突".良好的散列算法将尝试确保尽可能最小化冲突(尽管它们无法消除).通常这取决于实际中的实际数据类型; 在这种字符串的情况下,这意味着相似或相似大小的字符串应该(理想情况下)不易发生冲突.
我假设你问,因为你正在考虑使用字符串的哈希码作为字符串的唯一标识符. 不要那样做.
如果您有兴趣,这里有一个关于哈希码更详细的链接.
一般来说,一旦你拥有与哈希空间大小的平方根一样多的元素,就应该期望哈希冲突http://en.wikipedia.org/wiki/Birthday_problem
对于32位散列,您应该期望第一次碰撞65k元素.这当然是统计学的,所以你无法确切地预测它何时会发生,但它对于直觉是有用的.如果你有10个字符串,你可能不需要担心碰撞,如果你肯定有100k.
| 归档时间: |
|
| 查看次数: |
4235 次 |
| 最近记录: |