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

有人可以描述需要设置负载系数的不同方案是什么,以及针对不同情况的一些理想样本值是什么?

最佳答案

documentation很好地解释了它:


  HashMap的实例具有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中存储桶的数量,初始容量只是创建哈希表时的容量。负载因子是在自动增加其哈希表容量之前允许哈希表获得的满度的度量。当哈希表中的条目数超过负载因子和当前容量的乘积时,哈希表将被重新哈希(即,内部数据结构将被重建),因此哈希表的存储桶数大约为两倍。
  
  通常,默认负载因子(.75)在时间和空间成本之间提供了一个很好的权衡。较高的值会减少空间开销,但会增加查找成本(在HashMap类的大多数操作中都得到体现,包括get和put)。设置其初始容量时,应考虑映射中的预期条目数及其负载因子,以最大程度地减少重新哈希操作的数量。如果初始容量大于最大条目数除以负载因子,则不会发生任何哈希操作。


与所有性能优化一样,最好避免过早地进行优化(即在没有瓶颈瓶颈的硬数据的情况下)。

10-07 23:34