当前位置: 首页 > 编程语言 > C#

为什么字典键是不可变的?分享

时间:2023-04-10 19:44:32 C#

为什么字典键是不可变的?一个问题,为什么他们需要不可变对象作为字典中的键。当我最近使用字典(显然不是用于哈希表目的)将XmlNode对象作为键时,问题实际上就在我脑海中。然后我在使用过程中多次更新节点。那么“使用不可变键”到底是什么意思呢?将键插入哈希表时,哈希表会向键询问其哈希码,并将其与键本身和相关值一起记住。稍后执行查找时,哈希表会询问您要查找其哈希码的键,并且可以非常快速地找到表中具有相同哈希码的所有键。只要哈希表中的键在其整个生命周期内保持相同的哈希码,这一切都很好——但如果它们是可变的(并且在插入哈希表后发生变异),那么哈希码通常会发生变化,此时搜索时从未找到该条目。当然,这只适用于影响平等的突变。例如,如果您对具有名称和生日的Person实体进行哈希处理,但出于某种原因,仅使用该名称来实现相等性(因此在计算哈希码时仅使用该名称),那么您可以将Person作为键,更改它的生日,以后仍然可以毫无问题地再次查找它。字典根据键的哈希码将项目放入桶中。如果您添加一个项目然后更改其密钥,则无法再找到该项目。如果使用新键值查找,字典会在不同的桶中查找,如果使用旧键值,字典会找到桶的位置,但键不再匹配。字典类型是键和值之间的映射。映射将使用键的各种属性在内部字典存储中为其分配一个槽。在大多数情况下,它只是将属性简化为一个int值。如果一个键随时间发生变化,它的属性可能会开始映射到表中的不同索引。因此,该键将不再能够检索它最初在表中映射到的值。不可变类型完全避免了这种情况,因为它们永远不会改变。因此,它们的映射总是一致的。以上是C#学习教程:字典键为什么不可变?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: