首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentHashMap超过容量

ConcurrentHashMap超过容量
EN

Stack Overflow用户
提问于 2014-03-21 01:50:03
回答 2查看 2K关注 0票数 0

我是一个关于ConcurrentHashMap的新手。现在我编写以下代码:

代码语言:javascript
复制
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可以在达到容量时自行增加?

EN

回答 2

Stack Overflow用户

发布于 2014-03-21 01:51:48

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

假设您需要一个哈希映射,它将包含100万个处于稳定状态的键。然后,您可能会将散列映射初始化为50k大小。

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

编辑:

假设linear resizing,有一百万个键,如果你的初始值是50,那么每次你添加50个元素时,java都必须调整大小(这将涉及到复制)。调整大小的次数大约是20次,但是如果你的初始化值是500,那么你只需要调整两次。

票数 1
EN

Stack Overflow用户

发布于 2014-03-21 01:54:19

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22541210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档