日期:2014-05-17  浏览次数:20993 次

GetHashCode 是干什么 的?
在读.net 源码时读到这个,
在 Rectangle 类的一个方法!

  
//不懂什么 意思!
//好象是在对距形的数据压缩
public override int GetHashCode()
{
return (((this.X ^ ((this.Y << 13) | (this.Y >> 0x13))) ^ ((this.Width << 0x1a) | (this.Width >> 6))) ^ ((this.Height << 7) | (this.Height >> 0x19)));
}


求高手解译,
 这什么 有什么 用?
.net

------解决方案--------------------
Object.GetHashCode 方法
用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 
------解决方案--------------------
计算散列值,把一个对象的内容映射到一个int型整数上,让一个对象的内容对应一个int值,对象内容不同对应的int值不同,对象内容相同对应的int值相同,

这样,像Dictionary和HashSet之类的集合类型就可以用散列来快速查找,如果GetHashCode散列得均匀,Dictionary和HashSet等集合进行查找key操作的时候会很快,如果GetHashCode散列得不均匀,查找速度会变慢,

如果不能理解我的这些话,请详细看大学教科书《数据结构》中的有关散列的章节,

------解决方案--------------------
引用:
引用:
Object.GetHashCode 方法
用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。
看不懂,那些位运算的意义,

  从感觉,
      一样大小的距形的 GetHashCode  返回相同的数据,
      可是,不相等的距形的 GetHashCode  也可能返回相同的数据。……


你的直观感觉是对的。

Hash算法用来产生对应数据的摘要,这个摘要可以用来进行粗略比较、索引、查找、分组、抽样、校验等很多用途。相同(相同的概念由数据结构设计者决定)的数据一定拥有相同的hash值,不同的数据可以有相同或者不同的hash。hash算法的选取尽量满足如下目标:(1)均匀的分布。随机的数据,产生的hash不应该集中在很小的数值范围内;(2)雪崩效应,改变数据,得到的hash应该有很大的不同;(3)很小的碰撞概率,也就是随机2个不同数据的hash相等的概率要低;(4)很高的效率,hash算法本身要高效。为什么要这4个目标,从我前面说的用途不难理解。