HashMap数组的长度为什么是16

HashMap中数组的初始长度为16,当出现hash冲突时HashMap利用链表来解决这个问题.当链表长度超过8时,并且桶容量大于等于64时链表转为红黑树,否则优先扩容.

 

 

 

 

 

 

 其中的哈希函数决定了整个HashMap的效率,而决定整个HashMap效率的哈希函数采用的是位运算方式.

HashMap中的元素超过长度的百分之75时触发数组扩容.扩大为原来的两倍,扩容非常消耗性能.数组的初始化长度最好为2的幂.

回到标题,

假设张三手写了个HashMap,数组长度为10,前面提到哈希函数采用的是位运算的方式.hash算法的hash计算结果往往取决于HashCode值的最后几位

第一个数计算Hash值

 

 

 第二个数计算Hash值

 

 

  第三个数计算Hash值

 

 

 虽然HashCode的倒数第二第三位从0变成了1,但是运算的结果都是1001。当HashMap长度为10的时候,有些index结果的出现几率会更大,而有些index结果永远不会出现(比如0111)

而长度为2的幂时,Length-1的值是所有二进制位全为1,这种情况下,index的结果完全取决于HashCode后几位的值。只要输入的HashCode本身分布均匀,Hash算法的结果就是均匀的。

posted @   流年不粘  阅读(1425)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示