More Effective C#——详析GetHashCode方法

GetHashCode方法在哈希表和字典等数据结构中用于生成键,以加速检索。有效GetHashCode需满足:相等对象产生相同哈希,不等对象产生不同哈希;返回值一致性;良好哈希函数提高离散度。值类型和引用类型的默认GetHashCode可能效率不高,需根据需求重写。值类型应确保不可变成员生成哈希,引用类型需考虑Equals重写的影响。
摘要由CSDN通过智能技术生成

GetHashCode函数一般是在操作HashTable或者Dictionary之类的数据集的时候被调用,目的是产生一个Key,为了方便在 HashTable或者 Dictionary中的检索。 每个类型,不管是值类型还是引用类型,都提供这个基本函数,同样也可以像重写ToString或者Equals函数一样去重写它。但是不建议重写此函数,而且在使用这个函数也需要加倍小心。

 

对于GetHashCode来说,要满足如下三点,这也是判断一个GetHashCode函数是否有效的标准。

第一,两个相等的对象,通过GetHashCode函数产生的结果要相 等,此外两个不相等的对象,通过GetHashCode函数的返回值要不相等;否则,通过其产生HashCode而存入HashTable中的数据就无法 取出来了。

第二,对于一个类型的对象来说,其GetHashCode函数的返 回值要自始至终要保持一致。否则,和第一点一样。

第三,在 GetHashCode函数中需要提供一个比较好的哈希函数,也就是在最小的范围内来实现数据分散,换句话说它的离散度决定HashTable存取效率。

 

对于引用类型自带的GetHashCode函数来说,基本上是正确的,但是效率不高;而对于值类型自带的GetHashCode函数而言,基本上是不正确的,即使正确也是效率不高。

 

首先说说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值