HashMap 值需要不可变吗?

2024-05-17

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

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

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

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HashMap 值需要不可变吗? 的相关文章

随机推荐