负载因子在 HashMap 中的重要性是什么?

2022-08-31 05:27:00

HashMap具有两个重要属性:和 。我浏览了Java文档,它说是初始负载因子。但我找不到它的实际用途。sizeload factor0.75f

有人可以描述我们需要设置负载因子的不同场景,以及不同情况下的一些样本理想值是什么?


答案 1

文档很好地解释了这一点:

HashMap 的实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的存储桶数,初始容量只是创建哈希表时的容量。负载因子是衡量在哈希表的容量自动增加之前允许哈希表获得满量的指标。当哈希表中的条目数超过负载因子和当前容量的乘积时,将重新哈希表(即重建内部数据结构),以便哈希表的存储桶数大约是其两倍。

作为一般规则,默认负载因子 (.75) 在时间和空间成本之间提供了良好的权衡。较高的值可减少空间开销,但会增加查找成本(反映在 HashMap 类的大多数操作中,包括 get 和 put)。在设置地图的初始容量时,应考虑地图中预期的条目数及其负载系数,以便最大限度地减少重新哈希操作的次数。如果初始容量大于最大条目数除以负载因子,则不会发生重哈希操作。

与所有性能优化一样,最好避免过早地优化(即没有关于瓶颈所在位置的硬数据)。


答案 2

拍摄的默认初始容量为 16,负载系数为 0.75f(即当前映射大小的 75%)。负载系数表示容量应在哪个级别加倍。HashMapHashMap

例如,容量和负载系数的乘积为 。这表示在将第 12 个键 – 值对存储到 中后,其容量变为 32。16 * 0.75 = 12HashMap