【问题标题】:why is loadFactor in HashMap is set to 0.75 by default? [duplicate]为什么HashMap中的loadFactor默认设置为0.75? [复制]
【发布时间】:2020-08-04 01:35:05
【问题描述】:

我正在阅读 HashMap.java 的源代码,对 loadFactor 的默认值感到困惑。正如本课程的作者所提到的

理想情况下,在随机 hashCodes 下,bin 中节点的频率遵循泊松分布,参数平均为 0.5,默认调整大小阈值为 0.75f ...

我不明白的是0.75f的调整阈值与泊松分布计算的频率之间的关系。

如果两者之间存在某种关系,那究竟是什么?

如果没有,默认阈值 0.75f 是从哪里来的?

【问题讨论】:

  • 这可能会有所帮助 - stackoverflow.com/a/10901821/7505731
  • 我以前读过这个,但我认为我期待的是价值0.75f的理论原因或支持。换句话说,为什么默认 loadFactor 设置为 0.75f 而不是 0.5 或任何其他值?或者,我对这个理由的追求根本没有意义?不管怎样,谢谢你的回答:)

标签: java


【解决方案1】:

因为即使有一个非常好的哈希码实现,也会发生冲突(冲突意味着两个元素适合在同一个桶中)。地图中的元素数量越多,发生碰撞的机会就越多。当地图填充 75% 时,碰撞频率会增加。建议使用 0.75 左右的负载因子以保持 put 和 get 复杂度在 O(1) 左右。

【讨论】:

猜你喜欢
  • 2017-01-30
  • 1970-01-01
  • 2014-03-10
  • 2019-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
相关资源
最近更新 更多