在我的程序中,键值对经常被添加到Map
,直到添加了1G对。地图调整大小会减慢进程。如何将最小Map
大小设置为,例如1000000007(这是一个素数)?
答案 0 :(得分:5)
HashMap
的构造函数采用地图的初始大小(如果需要,还有加载因子)。
Map<K,V> map = new HashMap<>(1_000_000_007);
答案 1 :(得分:3)
如何将最小地图大小设置为,例如1000000007(这是一个素数)?
使用HashMap(int)
或HashMap(int, float)
构造函数。 int
参数是容量。
HashMap的大小应该是最小化聚类的。
HashMap
构造函数的过去和当前实现都将选择容量为2的最小幂(最多2 30 ),该容量大于或等于提供的容量。所以使用素数没有效果。
构造函数会阻止map调整大小吗?
HashMaps不会调整大小。
(请注意, size 和 capacity 是不同的。size()
方法返回Map
中当前条目的数量。您可以“t”设置“大小。”
答案 2 :(得分:2)
你应该注意的事情。 HashMap中的桶数是2的幂(可能不会在将来),2的下一个幂是2 ^ 30。负载因子决定了它应该以什么尺寸增长Map。通常这是0.75。
如果您将容量设置为预期大小,则会;
构造函数会阻止map调整大小吗?
执行此操作的唯一方法是将所有元素复制到新Map中。这不是自动完成的。