c# - 为什么哈希表和字典不使用 Equals() 方法而不是 GetHashCode 在 .NET 中进行键比较?

标签 c# .net hashtable equals

在 .NET 中,每当我们重写类的 Equals() 方法时,通常的做法是同时重写 GetHashCode() 方法。这样做可以确保在哈希表和字典中使用该对象时获得更好的性能。只有当它们的 GetHashCode() 值相同时,两个键才被认为在 Hashtable 中是相等的。我的问题是为什么 Hashtables 不能使用 Equals() 方法来比较键?这会消除覆盖 GetHashCode() 方法的负担。

最佳答案

HastTable/Dictionaries 在发生冲突时使用Equals(当两个哈希码相同时)

Why don't they use only Equals ?

因为这比访问/(比较) 整数值(哈希码)需要更多的处理。 (由于哈希码被用作索引,所以它们具有 O(1) 的复杂度)

关于c# - 为什么哈希表和字典不使用 Equals() 方法而不是 GetHashCode 在 .NET 中进行键比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34751767/

相关文章:

c# - Response.Redirect() 禁用后退按钮

c# - 如何在按赞按钮后获取用户信息

c# - 发布版本中的 Debug.WriteLine

java - 添加到哈希表中的值 [Java]

c# - 无法转换属性的范围键值

c# - 在源代码和预编译二进制文件之间切换

c# - .net StackFrame 和当前行/列

c# - 在 Visual Studio 中使用 Debugger Visualizers 而无需将其 dll 程序集复制到 VS 的文件夹

java - 当我新建一个 Hashtable 时,为什么会调用 put 方法?

java - 用于在 Java 中创建通用哈希表的哈希函数(用于学习目的)