Q:为什么扩容要以2的次幂*?
A: 1.因为在计算数组下标时用到的函数是H & (length -1),如果是奇数的话-1后的2进制末尾是0,这样在于hashcode做与操作时永远都是0,这样会造成分布不均匀
2.当hashmap做扩容的时候,数组容量如果非2的次幂的话,需要每次对所有元素进行重新计算,这样效率会很低,而2的次幂的话,只需看元素hashcode末位是否为如果为1,新数组的下标不变,0=当前数组下标+老数组的长度
Q:为什么扩容要以2的次幂*?
A: 1.因为在计算数组下标时用到的函数是H & (length -1),如果是奇数的话-1后的2进制末尾是0,这样在于hashcode做与操作时永远都是0,这样会造成分布不均匀
2.当hashmap做扩容的时候,数组容量如果非2的次幂的话,需要每次对所有元素进行重新计算,这样效率会很低,而2的次幂的话,只需看元素hashcode末位是否为如果为1,新数组的下标不变,0=当前数组下标+老数组的长度