集合_HashMap_tableSizeFor

结论:返回大于或等于参数的最小2的n次方数 

关于cap - 1:让函数在参数本身即为2的n次方数的情况下,返回参数本身

    static final int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }

示例

在查看示例前,确保已了解位运算与移位运算

关于位运算与移位运算,可参照: 

Java_位运算符简述_Mudrock__的博客-CSDN博客

Java_移位运算简述_Mudrock__的博客-CSDN博客

情况01:参数本身即为2的n次方数

假定传入的初始容量为16,即0001 0000,则该函数的运行步骤为:
0001 0000 - 0000 0001 = 0000 1111
0000 1111 | 0000 0111 = 0000 1111
0000 1111 | 0000 0011 = 0000 1111
........(后续步骤得到的结果均为0000 1111)
0000 1111 + 0000 0001 = 0001 0000
0001 0000转换为十进制即为16,所以函数最终返回的是16本身

情况02:参数本身不是2的n次方数

假定传入的初始容量为12,即0000 1100,则该函数的运行步骤为:
0000 1100 - 0000 0001 = 0000 1011
0000 1011 | 0000 0101 = 0000 1111
0000 1111 | 0000 0011 = 0000 1111
........(后续步骤得到的结果均为0000 1111)
0000 1111 + 0000 0001 = 0001 0000
0001 0000转换为十进制即为16,所以函数最终返回的是大于或等于12的最小2的n次方数

但是需要注意的是,若计算后得到的容量>MAXIMUM_PACACITY,则直接返回MAXIMUM_PACACITY

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值