hashMap容量问题:

hashMap是通过key的hash运算,解决key在哪,在java8中,key的位置下标通过(n - 1) & hash计算所得。下标计算方法设计好,将会为查询带来很多好处。

  • 1,为什么要保证容量n为2的整数倍?

    n为2的整数倍,那么n-1就是一个奇数,奇数的最后一位肯定为1.
    为1的好处就是(n-1) & hash的值后一位为0或者为1,如果n不是2的
    整数幂,那么(n-1) & hash的运算结果后一位始终为0,这样下标结果肯定为偶数
    导致所有的数据都只能存放在偶数位置。
    HashMap中容量为2的整数次幂问题?
    好处:
    1,使元素分布均匀
    2,&的运算速度比%快
    3,保证结果在n以内,不会超出它的容量

  • 2,关于hash值?

    hashMap的默认容量为16.
    HashMap中容量为2的整数次幂问题?
    hashMap中的hash作了特殊处理,将key的hashCode值h进行右移16位(h >>> 16)
    然后将h与右移后的h做异或运算。实际就是把一个数的低16位和高16位做异或运算。
    在(n - 1) & hash 的计算中,hash变量只有末x位会参与到运算。使高16位也参与到hash的运算能减少冲突。
    HashMap中容量为2的整数次幂问题?

  • 3,n永远是2次幂?

    如果初始化的容量不是2的整数次幂,回通过方法tableSizeFor返回一个2的整数次幂。
    HashMap中容量为2的整数次幂问题?

相关文章:

  • 2021-04-20
  • 2021-06-25
  • 2022-12-23
  • 2021-11-27
  • 2021-06-22
  • 2022-01-07
  • 2021-06-25
猜你喜欢
  • 2021-06-19
  • 2022-12-23
  • 2021-04-19
  • 2022-12-23
  • 2021-07-15
  • 2021-11-06
  • 2021-06-15
相关资源
相似解决方案