加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 我可以使用GetHashCode()进行所有字符串比较吗?

发布时间:2020-12-15 19:45:45 所属栏目:百科 来源:网络整理
导读:我想基于要搜索的对象和一些搜索设置来缓存一些搜索结果. 但是:这会创建相当长的缓存键,我想我会为它创建一个快捷方式,我想我会使用GetHashCode(). 所以我想知道,GetHashCode()总是生成一个不同的数字,即使我有很长的字符串或只有这个不同:’?’而不是’a
我想基于要搜索的对象和一些搜索设置来缓存一些搜索结果.

但是:这会创建相当长的缓存键,我想我会为它创建一个快捷方式,我想我会使用GetHashCode().

所以我想知道,GetHashCode()总是生成一个不同的数字,即使我有很长的字符串或只有这个不同:’?’而不是’a’

我尝试了一些字符串,似乎答案是肯定的,但不了解GetHashCode()行为并没有给我真正的感觉,我是对的.

而且因为当你没有准备好时(客户端正在查看错误搜索的缓存结果),它会突然出现,我想确定…

编辑:如果MD5可以工作,我可以改变我的代码不使用GetHashCode的课程,目标是获得一个短的(呃)字符串比原来(> 1000个字符)

解决方法

你不能指望GetHashCode()是唯一的.

有一篇很好的文章调查了http://kenneththorman.blogspot.com/2010/09/c-net-equals-and-gethashcode.html可能发生碰撞的可能性.调查结果是“GetHashCode()调用不同字符串返回相同哈希码的最小次数是在565次迭代之后,获得哈希码冲突之前的最大迭代次数是296390次迭代.”

因此,您可以了解GetHashCode实现的合同,以下是来自Object.GetHashCode()的MSDN文档的摘录:

哈希函数必须具有以下属性:

>如果两个对象比较相等,则每个对象的GetHashCode方法必须返回相同的值.但是,如果两个对象的比较不相等,则两个对象的GetHashCode方法不必返回不同的值.
>对象的GetHashCode方法必须始终返回相同的哈希码,只要对对象状态没有修改即可确定对象的Equals方法的返回值.请注意,这仅适用于当前应用程序的执行,并且如果再次运行应用程序,则可以返回不同的哈希代码.
>为获得最佳性能,哈希函数必须为所有输入生成随机分布.

C#编译器团队的Eric Lippert在http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/的博客上解释了GetHashCode实现规则的基本原理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读