当前位置: 首页 > news >正文

某某银行行面试题目汇总--HashMap为什么要扩容

一、HashMap啥时候扩容,为什么扩容?
HashMap的默认大小是16。在实际开发过程中,我们需要去存储的数据量往往是大于存储容器的默认大小的。所以,出现容量默认大小不能满足需求时,就需要扩容。而这个扩容的动作是由集合自动完成的。
当HashMap里面的元素个数超过临界值的时候会自动触发扩容。这个临界值的计算公式如图所示:
在这里插入图片描述它等于负载因子 乘以 容量大小,负载因子的默认值是0.75,而容量大小默认是16,。也就是说,第1次扩容的动作会在元素个数达到12的时候触发,扩容的大小是原来的2倍。HashMap的最大容量是Integer.MAX_VALUE也就是2的31次方减1。

由于动态扩容机制的存在,所以我们在实际应用的时候,最好在集合初始化的时候明确去指定集合的大小,从而避免频繁扩容带来性能上的消耗。

在这里插入图片描述
负载因子表示Hash表中的元素填充程度。负载因子的值越大,也就意味着触发扩容的元素个数就越多。虽然,它的整体空间利用率会比较高,但是Hash冲突的概率也会增加。那么,反之,负载因子的值越小,那么触发扩容元素的个数也就越少,也就意味着Hash冲突的概率也会减少。但是,对于内存空间的浪费自然就比较多了,而且还会增加扩容的频率。

因此,扩容因子的值的设置,本质上就是一个冲突的概率以及空间利用率之间的一个平衡。关于0.75这个值的来源,和统计学里面的泊松分布有关系。
我们知道,HashMap采用的是链式寻址的方式来解决Hash冲突的问题。而为了避免链表过长,导致时间复杂度增加的情况,所以,HashMap判断链表长度大于等于8的时候,就会转换为红黑树,从而提升检索的效率。

当负载因子为0.75的时候,链表长度达到8的可能性几乎为0,也就是说,比较好的做到了空间成本和时间成本的平衡。

http://www.lryc.cn/news/16794.html

相关文章:

  • 求职者:“我有五年测试经验”面试官: “不,你只是把一年的工作经验用了五年”
  • Nacos配置中心
  • 【故障】6、yum不可用
  • 深度解读 | 数据资产管理面临诸多挑战,做好这5个措施是关键
  • 双检测人脸防伪识别方法(活体检测+人脸识别+关键点检测+人像分割)
  • 2023年3月 - 笔记
  • 浅谈Redisson实现分布式锁对原理
  • struts1.2升级struts2.5.30问题汇总
  • 电动汽车充放电的优化调度(Matlab代码实现)
  • 《JeecgBoot系列》 如何设计表单实现“下拉组件二级联动“ ? 以省市二级联动为例
  • 数学小课堂:数学的线索(从猜想到定理再到应用的整个过程)
  • Collecting package metadata (current_repodata.json): failed
  • 几十亿工单表,查询优化案例
  • LabVIEW应用程序(EXE)无法正确动态调用插件
  • 到了35岁,软件测试职业发展之困惑如何解?
  • Google Guice 3:Bindings(1)
  • 学习国家颁布的三部信息安全领域法律,理解当前工作中的信息安全合规要求
  • LeetCode_Python_二分查找算法
  • 功能测试三年,是时候做出改变了
  • 图扑孪生工厂流水线组态图可视化
  • 车机开发—【CarService启动流程】
  • webpack中require.context的运用
  • 2023“Java基础-中级-高级”面试集结,已奉上我的膝盖
  • RabbitMQ之发布确认
  • 一文读懂函数编程及其工作原理
  • WSO2 apim Subscribe to an API
  • 聚类(性能度量)
  • GPT-4——比GPT-3强100倍
  • echart中x轴数据过多时展示不全
  • 关于GIS原理的实际分析应用题的一些解法