HashMap 的初始值和最大值和扩容因子

HashMap 初始化默认值

HashMap 的初始化默认值是 16。

当然你也可以在 HashMap 构造的时候传入初始化的值。

HashMap 的最大值

HashMap 最大值是1 << 30。
<< 这个是 Java 使用的移位操作符,运行的结果为 2^30,这个在源码的注释中已经明确说明。

首先必须理解操作符 <<,它是左移操作符,表示对二进制进行左移。通常情况下,1 << x 等于 2^x

如上面标记的代码表明,如果要存的元素数目大于 MAXIMUM_CAPACITY,HashMap方法还把 数组大小capacity 强制设置成 MAXIMUM_CAPACITY

综上所述,HashMap限制数组大小最大值有两个地方,其一就是初始化时调用 tableSizeFor()函数,它会将容量置为 2的幂次,并保证不超过MAXIMUM_CAPACITY。

其二就是调用扩容函数 resize()进行容量翻倍时。如果容量达到MAXIMUM_CAPACITY时允许再扩容,新数组的容量就是 1 << 31,这会造成整型溢出,故Integer.MAX_VALUE 是 HashMap 的最终容量。

HashMap 扩容因子

所谓的加载因子,也叫扩容因子或者负载因子,它是用来进行扩容判断的 。

假设加载因子是0.5, HashMap 初始化容量是16,当 HashMap 中有 16 * 0.5=8 个元素时, HashMap 就会进行扩容操作。

而 HashMap 中加载因子为0.75,是考虑到了性能和容量的平衡。

 

 

上面的代码是 JDK 源代码中定义的参数,上面这 3 个参数定义了 Java 使用 HashMap 时候的基础。

 

https://www.ossez.com/t/hashmap/14224

posted @   huyuchengus  阅读(612)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-12-01 Git 如何清理敏感文本
2020-12-01 GitHub 如何为项目设置许可证
2020-12-01 GitHub 如何让你的提交显示被校验
2020-12-01 如何在 Windows 上创建一个新的 GPG key
2018-12-01 Confluence 6 空间标识
2018-12-01 Confluence 6 从一个模板中创建一个空间
2018-12-01 从早期 Spring Boot 版本升级
点击右上角即可分享
微信分享提示