【发布时间】: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