0
点赞
收藏
分享

微信扫一扫

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

技术只适用于干活 2021-09-25 阅读 90

jdk7中HashMap的扩容机制

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

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

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

分析

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

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

    • case_1

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

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

    • case_2

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

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

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

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

总结

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

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

举报

相关推荐

关于最多能有多少个TCP连接的学习

0 条评论