最近有粉丝问壹哥,为什么HashMap每次扩容时,都必须是2的N次方?
其实要想弄明白这个问题,我们就必须知道HashMap的底层源码结构。接下来壹哥就带各位来分析一下HashMap的底层设计。
我们知道,HashMap的底层是通过数组+链表+红黑树的数据结构来存放数据的。当新添加元素的key值出现了hash碰撞,就会在同一个bucket中形成链表或者红黑树。当键值对的数量超过阈值时就会扩容,将以前处于同一个链表或者红黑树上的元素打散,在新数组的 bucket 上进行重新分布。
当HashMap在初始化没有指定容量的情况下,首次添加元素时,数组的容量为16;当超出阈值,数组容量为扩容为之前的2倍。

那么问题来了,为什么HashMap会将首次初始化容量设置为16,而后续每次扩容都是之前的2倍?而不是像ArrayList首次为10,后续为1.5倍呢?这可是我们在面试时的一个高频考点哦!壹哥提醒各位,一定要搞清楚这一点哦。