我是一个关于ConcurrentHashMap的新手。现在我编写以下代码:
ConcurrentHashMap<Integer, Integer> map = new ConcurrentHashMap(1);
for(int i=0; i<10; i++){
map.put(i,i);
}
//print map我将ConcurrentHashMap的初始容量设置为1,然后将10个值放入其中。因此,在我看来,ConcurrentHashMap将只接收第一个值,并拒绝9的其余值;然而,当我打印地图时,我发现所有10个值都已存储在地图中。那么是不使用初始容量参数,还是ConcurrentHashMap可以在达到容量时自行增加?
发布于 2014-03-21 01:51:48
初始容量是散列映射将包含的元素数量的粗略估计。一旦开始添加更多元素,散列映射的大小就会增加(线性或指数增长)。增加散列映射的大小会产生开销。
假设您需要一个哈希映射,它将包含100万个处于稳定状态的键。然后,您可能会将散列映射初始化为50k大小。
另一方面,如果您的哈希图将只包含1000个处于稳定状态的键,那么您可能会使用一个较小的值进行初始化。
编辑:
假设linear resizing,有一百万个键,如果你的初始值是50,那么每次你添加50个元素时,java都必须调整大小(这将涉及到复制)。调整大小的次数大约是20次,但是如果你的初始化值是500,那么你只需要调整两次。
发布于 2014-03-21 01:54:19
JVM会自动增加大小。容量只是用来初始化任何支持映射到特定大小的集合。如果您确定要向其中添加至少X个项目,则将其初始化为该容量。JVM将根据需要为您调整大小。
https://stackoverflow.com/questions/22541210
复制相似问题