繁体   English   中英

ConcurrentHashMap超过容量

[英]ConcurrentHashMap over the capacity

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

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

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

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

编辑:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM