用户定义的大型HashMap的初始容量和LoadFactor值?

时间:2017-01-29 21:37:58

标签: java collections hashmap

我有一个存储数百万条的HashMap。现在为了避免在每次达到阈值时重新进行重新散列,我想给出用户定义的初始容量和负载因子值,以便重新散列是最小的。在这种情况下,初始容量和负载系数的值应该是什么?

1 个答案:

答案 0 :(得分:2)

一般情况下,如果您知道地图中的最大条目数n,为了避免调整大小,您可以将capacity设置为n / loadFactor。您将负载系数设置为某个值,该值反映了您在空间/时间权衡空间中的特定需求。如果您不确定哪种加载因子最佳,则0.75的默认值可能是一个很好的起点。

关键点是,capacity 哈希映射在调整大小之前将接受的元素数量,而是基础的大小阵列。哈希映射在调整大小之前将接受loadFactor * capacity个元素。因此,您需要在计算容量时加入loadFactor

具体而言,如果您使用loadFactor的默认0.75并且您知道地图将包含1,000,000个元素,则必须将容量设置为1e6 / 0.75 = ~1,333,334元素以避免调整大小。如果您不确定完全大小,那么包含缓冲区可能是有意义的,这样您就可以合理地避免调整大小。

可以说一个更好的API就是直接将capacity参数定义为在调整大小之前可以添加到集合中的元素数量,然后构造函数执行任何计算必须正确设置其内部阈值成员。这与其他结构的“容量”含义一致,例如ArrayList