HashMap之tableSizeFor方法

2020-06-08  本文已影响0人  陆阳226

tableSizeFor方法

HashMap内部的数组大小强制为2的幂次方,这样在根据key的hash值通过按位与非常效率的找到key在数组中的位置。

该方法返回大于输入数字的最相近2幂次方,方法原理:将输入数字的二进制表示中的0全部改为1(不包括补位的0),这样n+1之后就得到了2的幂次方

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;
}
上一篇 下一篇

猜你喜欢

热点阅读