HashMap中數組初始化的祕密

咱們知道,在新建一個HashMap對象時,不管傳的initialCapacity參數值爲多少,最總HashMap中數組的長度始終爲2的n次方,代碼以下:java

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;
}

>>>表示忽略符號右移,不足補0數組

假設cap的值爲10,那麼n的值爲9,對應二進制值爲1001 通過n |= n >>> 1;計算,此時n對應的二進制值爲1101 通過n |= n >>> 2;計算,此時n對應的二進制值爲1111 依次類推,最後n對應的二進制的值爲1111,對應十進制爲15 根據最後的三元運算,該方法的返回值爲16,也就是2的4次方code

相關文章
相關標籤/搜索