通用字典类键值
Posted
技术标签:
【中文标题】通用字典类键值【英文标题】:Generic dictionary class key value 【发布时间】:2009-05-25 06:33:03 【问题描述】:据我所知,在 HashTable 中,键字符串的哈希值是唯一的,因为如果有两个相同的字符串,GetHashCode() 函数将用第二个覆盖第一个。
这将确保具有相同值的不同字符串不会生成相同的哈希值。
但是对于泛型字典类,我们可以指定任何类型作为键的类型参数。
因此,该键生成的哈希值不能唯一,因为它不执行字符串行为。是这样吗?
如果不是,这个通用场景背后的过程是什么?
提前致谢,
杰……
【问题讨论】:
【参考方案1】:哈希仅用于将项目放入“桶”中,以便快速查找。哈希值不用于确定相等性。
所以不用担心,如果两个字符串(或其他)返回完全相同的哈希,它们确实会进入同一个存储桶,但它们仍然是单独的“键”。
【讨论】:
【参考方案2】:哈希值是通过GetHashCode()获得的,每个对象都实现了。继承自 System.Object 的默认实现不保证不同对象的返回值唯一。
但是,散列值对于对象不需要是唯一的,因为它们只是用来加快搜索速度,而且您的键类仍然需要一个相等实现来确定键是否相等。
因此,如果您使用 System.Object 作为您的键,它会根据引用的相等性从另一个键中识别一个键,因为它将使用 Object.Equals 来解决这个问题。
【讨论】:
以上是关于通用字典类键值的主要内容,如果未能解决你的问题,请参考以下文章