|
|
1
36
哈希代码实现必须具有的最重要属性是: 如果两个对象比较为相等,则它们必须具有相同的哈希代码。 如果有一个类,其中类的实例按引用比较相等,则不需要重写GetHashCode;默认实现保证同一引用的两个对象具有相同的哈希代码。(您在同一对象上两次调用同一个方法,因此结果当然是相同的。) 如果编写的类实现了与引用相等不同的相等性,则需要重写GetHashCode,以便比较为相等的两个对象具有相等的哈希代码。 现在,您可以通过每次返回零来实现这一点。这将是一个糟糕的哈希函数,但它是合法的。 好的哈希函数的其他属性是:
|
|
|
2
2
问题:
如果通过默认的gethashcode实现生成,则两个对象可以共享相同的哈希代码,因为:
结论: 只需将2^32个强引用对象分配给(在Win64上必须很容易)即可达到限制。 最后,在 object.GetHashCode reference in MSDN :GetHashCode方法的默认实现不保证不同对象的唯一返回值。此外,.NET框架不保证GetHashCode方法的默认实现,它返回的值在不同版本的.NET框架之间是相同的。因此,不能将此方法的默认实现用作哈希目的的唯一对象标识符。 |
|
|
3
0
您实际上不需要修改类上只需要 参考 平等。 而且,从形式上讲,这不是一个好的实现,因为它的分布很差。哈希函数应该有一个合理的分布,因为它改善了使用哈希表的集合中的哈希桶分布以及间接的性能。如我所说,这是一个 正式的 答:设计哈希函数时的一个指导原则。 |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |