通用字典类键值

时间:2009-05-25 06:33:03

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

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

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

但是当谈到泛型字典类时,我们可以指定任何类型作为键的类型参数。

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

如果没有,这个通用场景背后的程序是什么?

提前致谢,

...杰

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

哈希值由GetHashCode()获取,每个对象都实现。从System.Object继承的默认实现不保证不同对象的唯一返回值。

但是,哈希值不需要对象是唯一的,因为它们仅用于加速搜索,并且您的密钥类仍然需要相等的实现来确定密钥是否相等。

因此,如果您使用System.Object作为键,它将根据引用的相等性知道另一个键,因为它将使用Object.Equals来计算出来。