![]() |
1
36
哈希代码实现必须具有的最重要属性是: 如果两个对象比较为相等,则它们必须具有相同的哈希代码。 如果有一个类,其中类的实例按引用比较相等,则不需要重写GetHashCode;默认实现保证同一引用的两个对象具有相同的哈希代码。(您在同一对象上两次调用同一个方法,因此结果当然是相同的。) 如果编写的类实现了与引用相等不同的相等性,则需要重写GetHashCode,以便比较为相等的两个对象具有相等的哈希代码。 现在,您可以通过每次返回零来实现这一点。这将是一个糟糕的哈希函数,但它是合法的。 好的哈希函数的其他属性是:
|
![]() |
2
2
问题:
如果通过默认的gethashcode实现生成,则两个对象可以共享相同的哈希代码,因为:
结论: 只需将2^32个强引用对象分配给(在Win64上必须很容易)即可达到限制。 最后,在 object.GetHashCode reference in MSDN :GetHashCode方法的默认实现不保证不同对象的唯一返回值。此外,.NET框架不保证GetHashCode方法的默认实现,它返回的值在不同版本的.NET框架之间是相同的。因此,不能将此方法的默认实现用作哈希目的的唯一对象标识符。 |
![]() |
3
0
您实际上不需要修改类上只需要 参考 平等。 而且,从形式上讲,这不是一个好的实现,因为它的分布很差。哈希函数应该有一个合理的分布,因为它改善了使用哈希表的集合中的哈希桶分布以及间接的性能。如我所说,这是一个 正式的 答:设计哈希函数时的一个指导原则。 |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |