我注意到getHashCode()WP7中的每个控件都有一个方法,它返回一个数字序列.我可以使用此哈希码来识别项目吗?例如,我想识别设备中的图片或歌曲,并将其检查到哪里.如果为特定项目提供的哈希码是唯一的,则可以这样做.
你能帮我解释一下hashCode是什么getHashCode()用的吗?
BKS*_*eon 216
在了解了它的全部内容之后,我想通过类比写出一个希望更简单的解释:
想想Hashcode就像我们试图独特地识别某人一样
我是一名侦探,正在寻找一名罪犯.让我们称他为克鲁尔先生.(当我还是个孩子的时候,他是一个臭名昭着的凶手 - 他闯进了一所被绑架的房子,谋杀了一个可怜的女孩,甩了她的尸体,而且他还在外面 - 但这是另一回事.克鲁尔先生有一些特殊的特征,我可以用来在人群中独一无二地识别他.我们在澳大利亚有2500万人.其中一位是克鲁尔先生.我们怎么能找到他?
识别克鲁尔先生的坏方法
显然克鲁尔先生有蓝眼睛.这没有多大帮助,因为澳大利亚近一半的人口也有蓝眼睛.
识别克鲁尔先生的好方法
我还能用什么?我知道:我会用指纹!
优点:
上述特征通常产生良好的散列函数.
那么"碰撞"的处理是什么?
所以想象一下,如果我找到了领导者,我会找到一个与克鲁尔先生的指纹相匹配的人.这是否意味着我找到了克鲁尔先生?
........也许!我必须仔细看看.如果我使用SHA256(散列函数)而且我正在一个只有5个人的小镇看 - 那么我很有可能找到他!但是如果我使用MD5(另一个着名的散列函数)并在一个拥有+ 2 ^ 1000人的城镇中检查指纹,那么两个完全不同的人可能具有相同的指纹是相当好的可能性.
那么这一切的好处是什么呢?
哈希码的唯一真正好处是,如果你想在哈希表中放置一些东西 - 并且你想要快速找到对象的哈希表 - 这就是哈希代码的用武之地.它们允许你真正在哈希表中找到东西很快.这是一个大规模提高性能的黑客攻击,但准确性很低.
因此,让我们假设我们有一个填充了人的哈希表 - 澳大利亚有2500万嫌犯.克鲁尔先生在那里的某个地方.....我们怎么能很快找到他?我们需要对它们进行整理:寻找潜在的匹配,或者以其他方式宣告潜在的嫌疑人.您将使用哈希码.哈希码可以告诉您两个人是否不同.Joe Bloggs是不是克鲁尔先生.如果印刷品不匹配,那么你知道肯定不是克鲁尔先生.但是,如果指纹确实匹配,那么取决于你使用的哈希函数,你找到你的男人的机会已经相当不错了.但这不是100%.您可以确定的唯一方法是进一步调查:(i)他/她是否有机会/动机,(ii)证人等等.
当您使用计算机时,如果两个对象具有相同的哈希码值,那么您再次需要进一步调查它们是否真正相等.例如,如果整数相同,或者如果customer_id匹配,则必须检查对象是否具有相同的高度,相同的权重等,然后判断它们是否相同.这通常可能通过实现IComparer或IEquality接口来完成.
主要摘要
所以基本上哈希码是指纹.
你需要花3分钟时间绕过上面.或许阅读几次直到它有意义.我希望这可以帮助别人,因为我学到这一切需要很多的悲伤!
SLa*_*aks 100
哈希码是一个数值,用于在相等测试期间标识对象.它还可以充当集合中对象的索引.
GetHashCode方法适用于散列算法和数据结构,例如散列表.
GetHashCode方法的默认实现不保证不同对象的唯一返回值.此外,.NET Framework不保证GetHashCode方法的默认实现,并且它返回的值在不同版本的.NET Framework之间是相同的.因此,此方法的默认实现不得用作散列目的的唯一对象标识符.
GetHashCode方法可以被派生类型覆盖.值类型必须覆盖此方法,以提供适合该类型的哈希函数,并在哈希表中提供有用的分布.为了唯一性,哈希码必须基于实例字段或属性的值,而不是静态字段或属性.
用作Hashtable对象中的键的对象还必须覆盖GetHashCode方法,因为这些对象必须生成自己的哈希代码.如果用作键的对象不提供GetHashCode的有用实现,则可以在构造Hashtable对象时指定哈希代码提供程序.在.NET Framework 2.0版之前,哈希代码提供程序基于System.Collections.IHashCodeProvider接口.从2.0版开始,哈希代码提供程序基于System.Collections.IEqualityComparer接口.
基本上,存在哈希码以使哈希表成为可能.
保证两个相等的对象具有相同的哈希码.
两个不相等的对象不能保证具有不相等的哈希码(称为冲突).
sea*_*and 11
GetHashCode()用于帮助支持将对象用作哈希表的键.(类似的东西存在于Java等中).目标是每个对象返回一个不同的哈希码,但这通常不能绝对保证.虽然两个逻辑上相等的对象返回相同的哈希码是必需的.
典型的哈希表实现以hashCode值开始,获取模数(从而将值约束在一个范围内)并将其用作"桶"数组的索引.
它并不是WP7独有的 - 它存在于所有.Net对象上.它有点像你描述的那样,但我不推荐它作为你的应用程序中的唯一标识符,因为它不能保证是唯一的.
| 归档时间: |
|
| 查看次数: |
103908 次 |
| 最近记录: |