GetHashCode方法学习笔记

1 HashCode概念

HashCode是一种编码方式。

通过哈希算法(函数),任意长度的输入均可以变换成固定长度的输出,该输出就是HashCode

.net中,HashCode用于Dictionary或者HashTable等集合,为集合元素对象产生一个Key,便于集合元素的检索查找。

 

2 GetHashCode的特点

1〉 对于同一个对象,GetHashCode方法产生的HashCode应该自始至终是一致的。

2〉 对于两个相等的对象,GetHashCode方法产生的HashCode也应该相等。

3〉 对于两个不相等的对象,GetHashCode方法产生的HashCode也应该不相等。但是,GetHashCode方法永远只返回一个整型类型,而整型类型的容量是有限的,这样可能就会存在两个不同的对象使用GetHashCode方法会产生相同的HashCode

例如以下代码:

string str1 = "NB0903100006";
string str2 = "NB0904140001";
Console.WriteLine(str1.GetHashCode());
Console.WriteLine(str2.GetHashCode());

运行结果:

对于第三点中所提到的那种情况,出现的概率到底有多大,就取决于所采用的哈希函数了。

关于各类哈希函数的介绍请参考:《各种字符串Hash函数比较及各种Hash算法代码大全

 

3 Object.GetHashCode方法

返回当前对象的哈希代码。详细介绍:http://msdn.microsoft.com/zh-cn/library/system.object.gethashcode(v=vs.110).aspx

Object.GetHashCode方法源码如下:

每个类型,不管是值类型还是引用类型,都提供这个基本函数,同样也可以去重写它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值