咱們知道,在新建一個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