gpt4 book ai didi

java - 调整并发 HashMap 的大小

转载 作者:行者123 更新时间:2023-11-30 11:07:10 25 4
gpt4 key购买 nike

并发 HashMap 调整大小的内存惩罚量是多少。具体我要找的是

Q1。并发 HashMap 的大小是否加倍?我读到的内容表明调整大小是针对每个桶进行的,但并未表明桶数的增加是多少

Q2。如果并发 HashMap 的大小增加,节点如何移动到正确的桶,因为哈希码现在可能不同。具体而言,元素是根据哈希码添加的,因此节点如何通过重新哈希移动。

最佳答案

  1. 这是一个实现细节,有意未记录在案。通过不记录它,JDK 开发人员可以在不违反任何契约(Contract)的情况下自由地进行性能改进和权衡。您应该避免编写任何对未记录的行为做出假设的代码,例如如何调整集合的大小。 当前 实现记录在 class's comments 中如果您有兴趣阅读它们,但了解它们可以并且确实会随着时间而改变。

  2. 这同样是一个实现细节,但是您关于“哈希码现在可能不同”的说法是不正确的; HashMapConcurrentHashMap 都被记录为在面对哈希码不断变化的键时表现不正确。因此我们可以假设哈希码没有改变——只是对象存储的位置发生了变化。

    假设我们的分桶算法只是hashcode % size - 如果一个 bin 有 4 个槽并且一个对象的 hashcode 是 78 那么它会被放在 bin 2 (78 % 4 = 2)。如果将 bin 的大小调整为 8 个槽,则对象将移动到 bin 6 (78 % 8 = 6)。 JDK 类使用更优雅的分桶算法,但概念是相同的。

关于java - 调整并发 HashMap 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29014505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com