gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:30 26 4
gpt4 key购买 nike

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

最佳答案

一般来说,如果您知道 map 中的最大条目数 n,为避免调整大小,您可以将 capacity 设置为 n/负载因子。您将负载因子设置为某个值,该值反射(reflect)您在空间/时间权衡空间中的特定需求。如果您不确定什么负载系数最好,默认的 0.75 可能是一个不错的起点。

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

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

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

关于java - 大型 HashMap 的初始容量和 LoadFactor 的用户定义值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41926251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com