Java 为什么HashMap中更高的负载因子会减少空间开销

Java 为什么HashMap中更高的负载因子会减少空间开销,java,hashmap,Java,Hashmap,java文档中写道:“一般来说,默认加载因子(.75)在时间和空间成本之间提供了一个很好的平衡。较高的值会减少空间开销,但会增加查找成本。” 为什么会减少空间开销?bucket中的额外节点不是与额外数组大小相等吗 (最终,条目的数量将是相同的!)负载系数控制地图在容量翻倍之前的满度 让我们假设您有一个理想的哈希函数,该函数在桶之间具有适当的分布。假设您有一个容量为100、负载系数为0.75的地图。这意味着,当您添加元素以填充75个存储桶时,其分配的容量将加倍,即变为200。因此,对于75个实际存

java文档中写道:“一般来说,默认加载因子(.75)在时间和空间成本之间提供了一个很好的平衡。较高的值会减少空间开销,但会增加查找成本。”

为什么会减少空间开销?bucket中的额外节点不是与额外数组大小相等吗


(最终,条目的数量将是相同的!)

负载系数控制地图在容量翻倍之前的满度

让我们假设您有一个理想的哈希函数,该函数在桶之间具有适当的分布。假设您有一个容量为100、负载系数为0.75的地图。这意味着,当您添加元素以填充75个存储桶时,其分配的容量将加倍,即变为200。因此,对于75个实际存储桶,您已经分配了200个容量。开销,即浪费的空间=125

现在,假设我们有另一个地图,容量为100,负载系数为0.5。这意味着,当地图填充了50个实际存储桶时,它的容量将增加一倍。因此,对于50个条目,容量现在是200。开销=150


负载能力越高,情况就越相反,即浪费的空间越少

条目数与数组大小的比率是加载因子。当它更高时,相对于条目的数量,额外的数组插槽更少。