据我所知,在HashTable中,键字符串的哈希值是唯一的,因为如果有两个相同的字符串,则GetHashCode()函数将用第二个字符覆盖第一个字符串。
这将确保具有相同值的不同字符串不会生成相同的哈希值。
但是当谈到泛型字典类时,我们可以指定任何类型作为键的类型参数。
因此,该键生成的哈希值不能是唯一的,因为它不执行字符串行为。是这样吗?
如果没有,这个通用场景背后的程序是什么?
提前致谢,
...杰
答案 0 :(得分:3)
哈希仅用于将项目放入“桶”以便快速查找。哈希值不用于确定相等性。
所以不要担心,如果两个字符串(或其他)返回完全相同的哈希值,它们确实会进入相同的存储桶,但它们仍然是单独的“键”。
答案 1 :(得分:1)
哈希值由GetHashCode()获取,每个对象都实现。从System.Object继承的默认实现不保证不同对象的唯一返回值。
但是,哈希值不需要对象是唯一的,因为它们仅用于加速搜索,并且您的密钥类仍然需要相等的实现来确定密钥是否相等。
因此,如果您使用System.Object作为键,它将根据引用的相等性知道另一个键,因为它将使用Object.Equals来计算出来。