GetHashCode方法学习笔记

时间:2021-07-01 16:47:59

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());

运行结果:

GetHashCode方法学习笔记

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

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

 

3 Object.GetHashCode方法

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

Object.GetHashCode方法源码如下:

GetHashCode方法学习笔记

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