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的问题。

最新文章

  1. C++构造函数
  2. Java学习笔记(六)&mdash;&mdash;方法
  3. 较复杂js的书写格式
  4. Hadoop集群中Hbase的介绍、安装、使用
  5. Python 类型的分类
  6. ASP.NET页面生命周期与控件生命周期
  7. 非UI线程和UI线程通信
  8. ckplayer 网页视频播放
  9. Eclipse将引用了第三方jar包的Java项目打包成jar文件
  10. better-scroll不能滚动之 滚动监听-左右联动
  11. Java中String做为synchronized同步锁使用详解
  12. C#中的RDLC报告
  13. Spring MVC Content Negotiation 转载
  14. nginx根据CPU配置多线程运行
  15. 【Java】 剑指offer(3) 二维数组中的查找
  16. SQL 查询存储过程
  17. Python第三弹--------文件和异常
  18. kalinux 换源
  19. Android蓝牙学习笔记
  20. AngularJS入门基础——作用域

热门文章

  1. Redis数据结构之字符串-SDS
  2. Unity中对注册表进行修改
  3. etimer
  4. bzoj3143 游走 期望dp+高斯消元
  5. PHP算法之有效的括号
  6. 7.Struts2框架封装数据
  7. 覆盖element ui 的样式
  8. net core静态文件 访问除默认目录文件配置
  9. composer(作曲家)安装php-ml
  10. 求最长的任意两元素差不超过M的子段——双指针+单调队列hdu4123