我知道 HashMap 中的键需要是不可变的,或者至少确保它们的哈希码( hashCode() )不会改变或与具有不同状态的另一个对象发生冲突。

但是,HashMap 中存储的值是否需要与上述相同*?为什么或者为什么不?

* 想法是能够改变值(例如在其上调用 setter),而不会影响以后使用不可变键从 HashMap 中检索它们的能力。如果值发生变异, 会破坏它们与键的关联吗?

我的问题主要是关于 Java,但是,欢迎其他语言的回答。

最佳答案

不。通常,哈希映射数据结构的特征不依赖于值。使键不可变很重要,因为底层数据结构是在插入时使用键的散列构建的。底层数据结构旨在提供基于此散列的某些属性(相对快速查找、快速删除、快速删除等)。如果此散列要更改,则基于已更改的散列具有这些良好属性的数据结构将无效。如果您需要“修改” key ,一种通用方法是删除旧 key 并重新插入新 key 。

关于java - HashMap 值是否需要不可变?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26836168/

10-10 21:19