HashMap的数组长度为何必须是2的n次方

  • 扩容方便,数字位移计算方便效率高;
  • 计算元素下标使用的方式是key的hash & (数组length - 1),由于length2^n,转换成二进制后2^-1最低位就全部都是1,比如111,就相当于是数组长度的掩码,那么hash & 111就可以将数组的每一位都覆盖,加入数组长度不是2^n,那么length-1低位不全是1,比如101,那么hash & 101就会出现数组有的位置永远都不会有值。
  • 扩容的时候一条链表最多映射到两条链表上,计算效率高
  • 2^n长度设计hash算法比较容易实现散列比较均匀
posted @ 2023-04-30 08:13  神一样的存在  阅读(150)  评论(0编辑  收藏  举报