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方法源码如下:
每个类型,不管是值类型还是引用类型,都提供这个基本函数,同样也可以去重写它。