缔杰 C2530N+BH-52N 铝合金【www.7727s.com】 专业三脚架
分类:摄影

配置参数

  • 特色:缔杰(DIGIPOD) C2530N+BH-52N 铝合金 专业三脚架(黑色)(承重 8KG)

查看完整参数>>

HashMap的指定初始容量的构造函数:

public HashMap(int initialCapacity, float loadFactor) 

初始容量是根据参数 initialCapacity,求出 大于等于 initialCapacity 的最小的 2的N次方。

www.7727s.com,容量是2的N次方的原因,可参见 http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html

 

1、在JDK低版本中,通过循环移位运算,保证了初始容量为2的N次方

public HashMap(int initialCapacity, float loadFactor) {  
    ......

    int capacity = 1;  
    while (capacity < initialCapacity)  
        capacity <<= 1;  

    ...... 
}

 

2、JDK1.8中,对该运算进行了优化

public HashMap(int initialCapacity, float loadFactor) {
    ......
    this.threshold = tableSizeFor(initialCapacity);
}

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.1 参数不是2的N次方,转为二进制

1xxxxxxxx (假设9位,x中至少有一个为1),大于等于该数的最小2的N次方如下,十位

1000000000

第一步 1xxxxxxxx - 1,由于低位至少有一个1,所以减1后,位数不变

第二步 n |= n >>> 1;   1xxxxxxxx 右移一位 变成 1xxxxxxx, 或运算后变为 11xxxxxxx ,不管低位

第三步 n |= n >>> 2;   11xxxxxxx 右移两位 变成 11xxxxx, 或运算后变为 1111xxxxx ,不管低位 

第四步 n |= n >>> 4;   1111xxxxx 右移四位 变成 1111x, 或运算后变为 11111111x ,不管低位

本文由www.7727s.com发布于摄影,转载请注明出处:缔杰 C2530N+BH-52N 铝合金【www.7727s.com】 专业三脚架

上一篇:百诺 C1192TB0 下一篇:曼富图 iphone5/5s手机壳 LED灯 镜头五件套 PIXI脚
猜你喜欢
热门排行
精彩图文