通用字典类键值

Posted

技术标签:

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

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

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

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

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

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

提前致谢,

杰……

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于通用字典类键值的主要内容,如果未能解决你的问题,请参考以下文章

将通用列表的元素添加到字典

无法创建通用字典...有时

获取通用字典的指定值的多个键?

使用对象的字段作为通用字典键

基于JEECG制作一个通用的级联字典选择控件-DictCascadeUniversal

基于JEECG制作一个通用的级联字典选择控件-DictCascadeUniversal