HashMap决定元素所属索引的散列算法是hash & (length - 1)
分析:
HashMap的散列算法目的是为了得到均匀分布的小于length的索引
显然hash & 数值位全为1的数,得到的索引分布最均匀,因为1 & 任何数等于任何数本身
而恰好2^n - 1的数值位全为1,同时hash & 2^n - 1的取值范围为[0,2^n - 1],符合索引范围
问:为什么不直接将2^n - 1作为容量?
hash & 2^n - 1的取值范围为[0,2^n - 1],可能会发生数组下标越界