为什么loadfactor会是0.75

时间:2014-09-30 04:46:02

标签: java hash hashmap

我正在从ConcurrentHashMap

的javadoc中读到这个

当碰撞太多时(即,具有不同哈希码的密钥但落入以表格大小为模的相同槽中),动态扩展该表,并且每个映射保持大约两个箱的预期平均效果(对应于调整大小的0.75负载系数阈值。

如果每个映射是两个bin(key-> value),那么加载因子是否为0.5,而不是0.75?

1 个答案:

答案 0 :(得分:1)

分割在Map的整个运行时间内分摊的箱子有一个非常重要的成本。目标阈值(调整大小后) 0.5。但是,分割箱的触发阈值是0.75(可能是因为0.75是0.5+(0.5 / 2),大50%)。所需的箱数取决于碰撞的数量和hashCode()算法的效率,但假设碰撞很少(因为hashCode()很好地分配了密钥)。