HashMap扩容机制

HashMap扩容机制想要了解HashMap的扩容机制你要有这两个问题1.什么时候才需要扩容2.HashMap的扩容是什么1.什么时候才需要扩容当HashMap中的元素个数超过数组大小(数组长度)*loadFactor(负载因子)时,就会进行数组扩容,loadFactor的默认值(DEFAULT_LOAD_FACTOR)是0.75,这是一个折中的取值。也就是说,默认情况下,数组大小为16,那么当HashMap中的元素个数超过16×0.75=12(这个值就是阈值或者边界值threshold值)的时候,就把数组的大小扩展

大家好,又见面了,我是你们的朋友全栈君。

想要了解HashMap的扩容机制你要有这两个问题

  • 1.什么时候才需要扩容
  • 2.HashMap的扩容是什么

1.什么时候才需要扩容

当HashMap中的元素个数超过数组大小(数组长度)*loadFactor(负载因子)时,就会进行数组扩容,loadFactor的默认值(DEFAULT_LOAD_FACTOR)是0.75,这是一个折中的取值。也就是说,默认情况下,数组大小为16,那么当HashMap中的元素个数超过16×0.75=12(这个值就是阈值或者边界值threshold值)的时候,就把数组的大小扩展为2×16=32,即扩大一倍,然后重新计算每个元素在数组中的位置,而这是一个非常耗性能的操作,所以如果我们已经预知HashMap中元素的个数,那么预知元素的个数能够有效的提高HashMap的性能。

补充:

当HashMap中的其中一个链表的对象个数如果达到了8个,此时如果数组长度没有达到64,那么HashMap会先扩容解决,如果已经达到了64,那么这个链表会变成红黑树,节点类型由Node变成TreeNode类型。当然,如果映射关系被移除后,下次执行resize方法时判断树的节点个数低于6,也会再把树转换为链表。

2.HashMap的扩容是什么

进行扩容,会伴随着一次重新hash分配,并且会遍历hash表中所有的元素,是非常耗时的。在编写程序中,要尽量避免resize。

HashMap在进行扩容时,使用的rehash方式非常巧妙,因为每次扩容都是翻倍,与原来计算的 (n-1)&hash的结果相比,只是多了一个bit位,所以节点要么就在原来的位置,要么就被分配到”原位置+旧容量”这个位置。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147910.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • wxpython中文教程_wxPython快速入门教程

    wxpython中文教程_wxPython快速入门教程1第一个应用程序“Hello,world”importwxapp=wx.App(False)frame=wx.Frame(None,wx.ID_ANY,”HolloWorld”)frame.Show(True)app.MainLoop()2是创造一个wx.App实例。参数是“False”的意思是不将stdout和stderr重定向到一个窗口,这个参数是“True”对这个例子没有…

    2022年5月21日
    26
  • kali更新源失败解决办法

    kali更新源失败解决办法kali更新源失败哪怕是更换了多家的镜像站,但是依旧失败,并且etc/apt/source.list.d下并无文件而后搜寻资料,得知可以通过更新本地虚拟机内的密钥来解决此问题:showuthecode:sudoapt-keyadv–keyserverhkp://keys.gnupg.net–recv-keys7D8D0BF6参考资料…

    2022年5月28日
    87
  • EMWIN 使用记录

    EMWIN 使用记录EMWIN使用记录回调函数WM_PAINT其中出现pMsg->hWin是对话框的客户区句柄,其父句柄就是控件句柄WM_INIT_DIALOG其中出现pMsg->hWin是对话框控件句柄,控件函数使用CreatXXX返回的句柄为控件句柄,window控件可能需要除外…

    2022年10月14日
    3
  • 最新手机号段归属地数据库 (2021年4月版) 473101行

    最新手机号段归属地数据库 (2021年4月版) 473101行最新手机号段归属地数据库(2021年4月发行版)473101行基于:最新手机号段归属地数据库名称:手机号码归属地查询dat高效率查询压缩:原版txt为25M,生成这种dat结构为2.86M性能:每秒解析300w+,简洁高效创建:qqzeng-ip开发参考手机归属地查询c#javaphp解析dat内存优化版快速内存数据库Redis版以及导入数据库mys…

    2022年7月22日
    18
  • C# Json序列化工具–Newtonsoft.Json简介和使用

    C# Json序列化工具–Newtonsoft.Json简介和使用Newtonsoft.Json,是.Net中开源的Json序列化和反序列化工具,官方地址:http://www.newtonsoft.com/json。功能比较多,效率比较高,官方给出对比数据50%fasterthanDataContractJsonSerializer,and250%fasterthanJavaScriptSerializer.比较常用的功能除了序

    2025年7月26日
    4
  • 物联网,大数据和云计算的基本关系和应用场景_云计算物联网大数据的区别

    物联网,大数据和云计算的基本关系和应用场景_云计算物联网大数据的区别  身处信息快速发展的今天,物联网、大数据、云计算这些名词在我们的生活中出现的越来越频繁,看似高大上的三者其实却和我们的生活息息相关。带你来认识下三者之间的关系吧!  大数据  大数据(bigdata),就是指种类多、流量大、容量大、价值高、处理和分析速度快的真实数据汇聚的产物。大数据或称巨量资料或海量数据资源,指的是所涉及的资料量规模巨大到无法透过目前主流软件工具,在合理时间内达到撷取、…

    2022年10月6日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号