ConcurrentHashMap超过容量

时间:2014-03-20 17:50:03

标签: java concurrenthashmap

我是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可以自行增加?

2 个答案:

答案 0 :(得分:1)

初始容量是对哈希映射将包含多少元素的粗略估计。一旦开始添加更多元素,哈希映射的大小将增加(线性或指数)。 增加哈希映射的大小会产生开销。

假设你需要一个哈希映射,它将包含稳定状态下的100万个密钥。然后你可能会用50k大小初始化哈希映射。

另一方面,如果您的哈希映射只包含稳定状态下的1000个键,那么您可能会使用较小的值进行初始化。

修改

假设 linear resizing ,如果使用值50初始化100万个密钥,则每次添加50个元素时,java必须调整大小(这将涉及复制)。调整大小的数量大约为20.但是如果你初始化的值为500,那么你只需调整两次。

答案 1 :(得分:1)

JVM会自动增加大小。容量仅用于初始化任何集合将映射备份到特定大小。如果您确定要向其添加至少X个项目,则将其初始化为该容量。 JVM将根据需要为您调整大小。