-
初始化容量为什么一定是2的N次幂
看过hashmap源码的同学对上面的这个常亮一定不陌生,1<<4相当于 1*2的4次幂 也就是16,那么问题来了,为什么初始化容量必须是2的n次幂?
向HashMap中添加元素时,要根据key的hash值去确定其在数组中的具体位置。 HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同。怎么让元素均匀分配呢?
这里用到的算法是hash&(length-1)。hash
看过hashmap源码的同学对上面的这个常亮一定不陌生,1<<4相当于 1*2的4次幂 也就是16,那么问题来了,为什么初始化容量必须是2的n次幂?
向HashMap中添加元素时,要根据key的hash值去确定其在数组中的具体位置。 HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同。怎么让元素均匀分配呢?
这里用到的算法是hash&(length-1)。hash