【问题标题】:Generic dictionary class key value通用字典类键值
【发布时间】:2009-05-25 06:33:03
【问题描述】:

据我所知,在 HashTable 中,键字符串的哈希值是唯一的,因为如果有两个相同的字符串,GetHashCode() 函数将用第二个覆盖第一个。

这将确保具有相同值的不同字符串不会生成相同的哈希值。

但是对于泛型字典类,我们可以指定任何类型作为键的类型参数。

因此,该键生成的哈希值不能唯一,因为它不执行字符串行为。是这样吗?

如果不是,这个通用场景背后的过程是什么?

提前致谢,

杰……

【问题讨论】:

    标签: .net generics .net-2.0 c#-2.0


    【解决方案1】:

    哈希仅用于将项目放入“桶”中,以便快速查找。哈希值不用于确定相等性。

    所以不用担心,如果两个字符串(或其他)返回完全相同的哈希,它们确实会进入同一个存储桶,但它们仍然是单独的“键”。

    【讨论】:

      【解决方案2】:

      哈希值是通过GetHashCode()获得的,每个对象都实现了。继承自 System.Object 的默认实现不保证不同对象的返回值唯一。

      但是,散列值对于对象不需要是唯一的,因为它们只是用来加快搜索速度,而且您的键类仍然需要一个相等实现来确定键是否相等。

      因此,如果您使用 System.Object 作为您的键,它会根据引用的相等性从另一个键中识别一个键,因为它将使用 Object.Equals 来解决这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 2013-05-22
        • 2018-10-07
        相关资源
        最近更新 更多