在我的程序中,键值对经常被添加到Map
,直到添加了1G对。地图大小调整减慢了这个过程。我如何将最小Map
大小设置为,例如1000000007(这是一个素数)?
HashMap
的构造函数取map的初始大小(如果需要,还可以取负载因子)
Map<K,V> map = new HashMap<>(1_000_000_007);
我如何设置最小映射大小,例如1000000007(这是一个素数)?
使用HashMap(int)
或HashMap(int, float)
构造函数。"int
"为容量。
HashMap的大小应该是prime,以最小化集群。
过去和现在的HashMap
构造函数的实现都将选择大于或等于提供容量的2的最小幂(不超过230)的容量。所以使用质数是没有效果的。
构造函数会阻止map调整大小吗?
hashmap不能调整大小
(注意大小和容量是不同的东西。size()
方法返回Map
中当前条目的数量。你不能"设置"大小。)
你应该注意的事情。HashMap中的桶数是2的幂(将来可能不会),2的下一个幂是2^30。负载因子决定了它应该以什么大小来增长Map。通常是0.75。
如果您将容量设置为预期大小,它将;
- 四舍五入到2的次幂 当容量* 0.75达到时,
- 仍可能调整大小。
- 限制为2^30,因为它是数组大小中2的最大幂。
构造函数会阻止map调整大小吗?
唯一的方法是将所有元素复制到一个新的Map中。