【问题标题】: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 来解决这个问题。