Vai*_*hav 1 c# dictionary key immutability
有一个问题,为什么他们要求使用不可变对象作为字典中的键.
当我最近使用字典(显然不是为了哈希表的目的)将Xml节点对象作为键放置时,问题实际上在我脑海中浮现.然后我在使用期间多次更新节点.
那么'使用不可变密钥'究竟意味着什么呢?
Jon*_*eet 12
将密钥插入哈希表时,哈希表会向密钥询问其哈希码,并将其与密钥本身及相关值一起记住.当您稍后执行查找时,哈希表会询问您要查找其哈希码的密钥,并且可以非常快速地找到表中具有相同哈希码的所有密钥.
只要哈希表中的键在其整个生命周期中保持相同的哈希码,这一切都很好 - 但如果它们是可变的(并且在插入哈希表后进行了变异),那么哈希码通常会改变,此时搜索时永远不会找到该条目.
当然,这仅适用于影响平等的突变.例如,如果您Person对具有名称和生日的实体进行哈希处理,但由于某种原因,仅将该名称用于相等性(因此在计算哈希代码时仅使用该名称),那么您可以将Person哈希表中的a 插入关键,改变它的生日,并且仍然可以在以后再次查找它没有任何问题.
| 归档时间: |
|
| 查看次数: |
1436 次 |
| 最近记录: |