- 前言: 今天看到代码中有一句:
Map<String, Object> sqlMap = new HashMap(2); 由于以前也没啥注意,比较好奇这个2是干嘛用的
- 查阅资料:发现在阿里巴巴Java开发手册上建议HashMap初始化时设置已知的大小
初步了解后 我在想如何确定初始值的大小呢!
经过查询资料了解:
集合初始化时, 指定集合初始值大小。
说明: HashMap使用HashMap(int initialCapacity)初始化,
正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即loader factor)默认为0.75, 如果暂时无法确定初始值大小,请设置为16(即默认值)。
反例:HashMap需要放置1024个元素,由于没有设置容量初始大小,随着元素不断增加,容量7次被迫扩大,resize需要重建hash表,严重影响性能。
- 然后我又好奇,如何扩容的 每次扩容多少 如何计算。
默认是16,每次都是2的倍数,所以两次扩充之后变成64,三次就是128了
注意:本文归作者所有,未经作者允许,不得转载