C#中两个字符串的哈希冲突可能性有多大?我知道对于一般的对象,两个不相等的对象不能保证具有不相等的哈希码,但是当对象是字符串时,这是如何表现的。
我特别需要一个从URL字符串到唯一键的函数,但不需要任何花哨的东西,只是为了从Web缓存内容,如果某个URL已经加载则跳过下载。
修改
如果我定义这样的函数
,该怎么办?string UniqueKey (string url) {
var list = SplitStringInHalf (url);
var firstHalf = list[0].GetHashCode();
var secondHalf = list[1].GetHashCode();
return firstHalf.ToString() + secondHalf.ToString();
}
答案 0 :(得分:0)
答案 1 :(得分:0)
对于GetHashCode(),您可以在Stack Overflow上引用此question。它会告诉你,对于小字符串,它显然更高。
一般来说,独立于你的哈希方法,只要它是合理的,对于相对较长的字符串,2个字符串之间的机会相当低,但是因为你有很多字符串,概率的诅咒会使它更高(例如当你向一个组中再添加一个人时,该组中两个人生日相同的可能性要高得多。)
作为一般规则,您不应该依赖它是唯一的,您可以使用它来区分为主键,但是如果您使用它来排序,那么您需要确保具有相同哈希码的两个字符串是不同的它们。
例如,您可以使用哈希码创建hash table,键不会是唯一的,但只有在发生碰撞时才能进行正确的比较,这样可以简化比较任务大量的元素。