2、我们从 put(K key, V value) 源码角度来看数据结构
解释:
hash:为插入元素的hashcode
n:为map的容量大小
&:与操作 比如 1101 & 1011=1001
如果n为2的次幂 则n-1 转化为二进制必定是...1111的形式,与hash的二进制与操作计算速度会非常快,而且空间不浪费;如果n不是2的次幂,比如n为15,则n-1为14,对应的二进制为1110,在和hash与操作,最后一位都为0,而0001,0011,0101,1001,1011,0111,1101 这几个位置永远都不能存放元素,不但浪费空间,而且数组可以使用的位置比数组长度小了很多,增加了碰撞的几率,减慢了查询的效率。