未读代码_个人页

个人头像照片 未读代码
个人头像照片
0
1
0

个人介绍

Hi there ? 我是阿朗。公众号《程序猿阿朗》网站:https://www.wdbyte.com

擅长的技术

  • Java
  • 前端开发
获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息

2022年04月

正在加载, 请稍后...
暂无更多信息
  • 回答了问题 2022-04-06

    HashMap中扩容为什么是2的n次幂

    为啥容量都是 2 的幂? 容量是 2 的幂时,key 的 hash 值然后 & (容量-1) 确定位置时碰撞概率会比较低,因为容量为 2 的幂时,减 1 之后的二进制数为全 1,这样与运算的结果就等于 hash值后面与 1 进行与运算的几位。 下面是个例子。 hash HEX(97) = 0110 0001‬ n-1 HEX(15) = 0000 1111 -------------------------- 结果 = 0000 0001 # 计算得到位置是 1 hash HEX(99) = 0110 0011‬ n-1 HEX(15) = 0000 1111 -------------------------- 结果 = 0000 0011 # 计算得到位置是 3 hash HEX(101) = 0110 0101‬ n-1 HEX(15) = 0000 1111 -------------------------- 结果 = 0000 0101 # 计算得到位置是 5 如果是其他的容量值,假设是 9,进行与运算结果碰撞的概率就比较大。 hash HEX(97) = 0110 0001‬ n-1 HEX(09) = 0000 1001 -------------------------- 结果 = 0000 0001 # 计算得到位置是 1 hash HEX(99) = 0110 0011‬ n-1 HEX(09) = 0000 1001 -------------------------- 结果 = 0000 0001 # 计算得到位置是 1 hash HEX(101) = 0110 0101‬ n-1 HEX(09) = 0000 1001 -------------------------- 结果 = 0000 0001 # 计算得到位置是 1 另外,每次都是 2 的幂也可以让 HashMap 扩容时可以方便的重新计算位置。 hash HEX(97) = 0110 0001‬ n-1 HEX(15) = 0000 1111 -------------------------- 结果 = 0000 0001 # 计算得到位置是 1 hash HEX(97) = 0110 0001‬ n-1 HEX(31) = 0001 1111 -------------------------- 结果 = 0000 0001 # 计算得到位置是 1 参考:HashMap 源码分析解读
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息