首页 > 其他 > 详细

jdk8 hashmap tableSizeFor的理解

时间:2021-06-22 15:28:12      阅读:14      评论:0      收藏:0      [点我收藏+]
 /**
     * Returns a power of two size for the given target capacity.
     */
    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;
    }

代码是这样子,效果是为了获取一个2的指数大小的目标大小。

这里运算有一个重要的概念:

2进制的数,如果任意位都为1,如:111111,这样的数 +1后,会变成:1000000,而这个数必为2的指数。

 

所以,这个方法设计的时候,首先要考虑的是得到一个1111111这样的数,然后要加1。

然后还有一点,加入cap这个传进来的容量,就是一个2的指数呢?

这个时候,比如,传入的是2,结果会得到4,传入4,得到8,这样子就造成浪费,也与使用者的意图不符。

>>> 代表无符号右移,在正数的时候和>>是一样的。

 

jdk8 hashmap tableSizeFor的理解

原文:https://www.cnblogs.com/zkj1204/p/14917874.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!