【发布时间】:2019-05-02 02:27:58
【问题描述】:
来自 java 文档:“作为一般规则,默认加载因子 (.75) 在时间和空间成本之间提供了良好的折衷。较高的值会减少空间开销但会增加查找成本”
为什么它会减少空间开销?桶中的额外节点不是与额外数组大小相等吗?
(最终条目的数量将相同!)
【问题讨论】:
-
条目数与数组大小的比值是负载因子。当它较高时,相对于条目数而言,额外的数组槽数较少。
来自 java 文档:“作为一般规则,默认加载因子 (.75) 在时间和空间成本之间提供了良好的折衷。较高的值会减少空间开销但会增加查找成本”
为什么它会减少空间开销?桶中的额外节点不是与额外数组大小相等吗?
(最终条目的数量将相同!)
【问题讨论】:
负载因子控制地图在容量翻倍之前可以达到的满载程度。
假设您有一个理想的散列函数,可以在桶之间适当地分散。假设您有一张容量为 100 且负载因子为 0.75 的地图。这意味着当您添加元素以填充 75 个存储桶时,分配的容量会翻倍,即变为 200。因此,对于 75 个实际存储桶,您分配的容量为 200。开销即浪费的空间 = 125
现在,假设我们有另一个地图,其容量为 100,负载系数为 0.5。这意味着当地图填充 50 个实际存储桶时,它的容量会翻倍。因此,对于 50 个条目,容量现在为 200。开销 = 150。
更高的负载能力会发生相反的情况,即您浪费的空间更少。
【讨论】: