###为什么HashMap的数组大小(哈希桶的个数)总是2的幂?
-
在存贮一个元素时要先计算其hash值 得到其应该存储到的哈希桶的编号(索引值)
`int hash = hash(key); int i = indexFor(hash,table.length); `
-
这里我们假设有n个桶
-
计算下标时就是将对应的地址(一个int变量)映射到一个0~(n-1)的数
通常来说我们想到的是用取模的方法 i%n 这里会遇到两个问题一是负数的模是负数第二是模运算的速度较慢 -
所以我们采用了hash&(n-1)这种计算方式 这里n就是桶的个数
-
当n为2的幂时 我们就可以保证n-1的二进制数为一个全为1的形式
例如n=32 其二进制为100000 那么n-1就是11111 这样当hash值与其做&运算的时候就可以保证hash数据没有改变 就得到了数组下标(桶序号)