HashMap 什么时候进行扩容呢
2024-09-06 07:36:12
HashMap扩容:
当HashMap中的元素越来越多的时候,碰撞的几率也就越来越高(因为数组的长度是固定的),所以为了提高查询的效率,就要对HashMap的数组进行扩容,数组扩容这个操作也会出现在ArrayList中,所以这是一个通用的操作,很多人对它的性能表示过怀疑,不过想想我们的“均摊”原理,就释然了,而在hashmap数组扩容之后,最消耗性能的点就出现了:原数组中的数据必须重新计算其在新数组中的位置,并放进去,这就是resize。
那么HashMap什么时候进行扩容呢?当hashmap中的元素个数超过数组大小*loadFactor时,就会进行数组扩容,loadFactor的默认值为0.75,也就是说,默认情况下,数组大小为16,那么当hashmap中元素个数超过16*0.75=12的时候,就把数组的大小扩展为2*16=32,即扩大一倍,然后重新计算每个元素在数组中的位置,而这是一个非常消耗性能的操作,所以如果我们已经预知hashmap中元素的个数,那么预设元素的个数能够有效的提高hashmap的性能。比如说,我们有1000个元素new
HashMap(1000), 但是理论上来讲new
HashMap(1024)更合适,不过上面annegu已经说过,即使是1000,hashmap也自动会将其设置为1024。 但是new
HashMap(1024)还不是更合适的,因为0.75*1000 < 1000, 也就是说为了让0.75 * size >
1000, 我们必须这样new HashMap(2048)才最合适,既考虑了&的问题,也避免了resize的问题。
最新文章
- C++构造函数
- Java学习笔记(六)&mdash;&mdash;方法
- 较复杂js的书写格式
- Hadoop集群中Hbase的介绍、安装、使用
- Python 类型的分类
- ASP.NET页面生命周期与控件生命周期
- 非UI线程和UI线程通信
- ckplayer 网页视频播放
- Eclipse将引用了第三方jar包的Java项目打包成jar文件
- better-scroll不能滚动之 滚动监听-左右联动
- Java中String做为synchronized同步锁使用详解
- C#中的RDLC报告
- Spring MVC Content Negotiation 转载
- nginx根据CPU配置多线程运行
- 【Java】 剑指offer(3) 二维数组中的查找
- SQL 查询存储过程
- Python第三弹--------文件和异常
- kalinux 换源
- Android蓝牙学习笔记
- AngularJS入门基础——作用域