有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

大型HashMap的初始容量和加载因子的java用户定义值?

我有一个HashMap,它存储了数以百万计的条目。现在为了避免每次达到阈值时重新灰化,我想给出一个用户定义的初始容量和负载因子值,这样重新灰化是最小的。在这种情况下,初始容量和负载系数的值应该是多少


共 (1) 个答案

  1. # 1 楼答案

    通常,如果您知道地图中的最大条目数n,为了避免调整大小,可以将capacity设置为n / loadFactor。您将负载因子设置为某个值,该值反映了您在空间/时间权衡空间中的特定愿望。如果您不确定什么负载因子是最好的,那么默认的0.75可能是一个很好的起点

    关键是capacity不是哈希映射在调整大小之前将接受的元素数,而是底层数组的大小。哈希映射在调整大小之前将接受loadFactor * capacity个元素。因此,您需要在容量计算中包含loadFactor

    具体来说,如果您使用的是默认的loadFactor0.75,并且您知道您的映射将包含1000000个元素,那么必须将容量设置为1e6 / 0.75 = ~1,333,334个元素以避免调整大小。如果您不确定确切的大小,那么包含一个缓冲区可能是有意义的,这样您可以合理地确定避免调整大小

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