为什么阿里巴巴建议hashmap集合初始化的时候定义容量大小

JDK1.7在使用hashmap存储的时候,当知道集合大小的时候初始化的时候,建议指定集合容量大小

为什么呢?

hashmap源码中,我们知道hashmap不指定大小的时候,初始容量 capacity值为16。负载因子为0.75,当我们put操作的时候,会先看下容量是否达到capacity*3/4的扩容条件。而每次扩容都会进行rehash。每次的 rehash都是需要重建哈希表,很费时间和性能。当我们在已知集合大小的情况下,初始化容量大小那就不会进行rehash,性能提升。 反之就容量就默认就好了

当我们初始化定义容量大小的时候,大小定义多少合适了呢?

就定义为集合大小吗?

当然不行,如果我们定义为集合大小,还是可能出现扩容,rehash。

所以我们需要计算一下,大小多少合适,合理,减少扩容,避免rehash。

initCapacity=已知需要存储元素大小/负载因子+1。

为什么加1呢?

因为每次扩容的条件是存储元素每次达到capacity*3/4就扩容,减一当然就不会扩容了。再加一个就要扩容了

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值