趣研:jdk7的HashMap在触发扩容之前最多能存放多少个节点?

jdk7中HashMap的扩容机制

  • 必须同时满足以下两个条件

    • 添加新节点时当前已存放的节点数量必须大于等于当前阈值。

    • 本次添加节点时发生了hash冲突:(当前key计算的hash值换算出来的数组下标位置已经存在值)。

分析

  • 在触发第一次扩容之前存放的最大数量

    • pre_condition:默认大小为16,负载因子0.75,阈值12。

    • case_1

      存满 16个节点时,再存入第17个节点才会发生扩容现象,因为前16个节点,每个值在底层数组中分别占据一 个位置,虽然大于等于阈值,但没有发生hash碰撞

      如图所示:(图中数字仅代表节点添加顺序)

      image
    • case_2

      前11个节点,存到数组的同一个位置(这时元素个数小于阈值12,不会扩容)。

      如图所示:(图中数字仅代表节点添加顺序)

      image

      后面所有存入的15 个值全部分散到数组剩下的15个位置(虽然这个过程元素个数大于等于阈值,但是每次存入的元素与已存在的元素并没有发生hash碰撞,所以不会扩容)。

      如图所示:(图中数字仅代表节点添加顺序)

      image

总结

11+15=26,所以在存入第27个值的时候才同时满足上面两个条件,才会发生扩容现象。

在第一次扩容之前最多能存放26个节点

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容