【问题标题】:Java load factor tradeoffsJava 负载因子权衡
【发布时间】:2015-03-26 14:21:50
【问题描述】:

我听说 HashMap 中的负载因子会将存储桶恢复到其他位置,最好将其保持在 0.75,这样当大小达到 0.75*当前容量时,存储桶数组会重新分配为当前容量的两倍

例如,我们有 16 个容量;当大小变为 16*0.75 = 12 时,数组重新分配。此时,我们甚至在数组触及 16 之前创建了额外的 16 个元素,因为它的内存效率低下。

如果它是时间高效的,它是如何使用负载因子的,或者是否有任何权衡?

【问题讨论】:

  • 欢迎来到 SO,在发布您自己的问题之前尝试搜索相关问题!你可能会发现这个问题很丰富stackoverflow.com/questions/10901752/…
  • 这个问题似乎与函数式编程无关。
  • "表示内存效率低下。" -> 所以你的意思是哈希表应该等到完全填满后再分配新内存?内存效率(用你的话来说)——这不是这里唯一的因素;阅读为什么建议使用 0.75 的负载因子。
  • 另外,如果你碰巧有一个自定义哈希码函数并且它很糟糕(例如 int hashCode() { return 0; } ),即使是 0.75 因子也不会有任何好处。
  • “填满”是一个奇怪的概念。您分配了 16 个额外的 buckets,但一个 bucket 不一定对应一个条目。与放入其中的条目相比,存储桶实际上相对便宜。

标签: java performance collections hashmap


【解决方案1】:

HashMap 在冲突率较低时表现最佳。容量越大,发生碰撞的可能性就越小。即同一个桶中的两个键。

为避免高冲突率,使用负载因子来确保底层阵列的填充率永远不会超过 75%。

顺便说一句,与其他开销相比,数组使用的额外内存很小。

【讨论】:

  • 后来容量?
  • @gknicker 谢谢。 ;)
猜你喜欢
  • 1970-01-01
  • 2012-12-12
  • 2012-02-07
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 2017-09-21
相关资源
最近更新 更多