我们今天从源码入手分析一下为什么HashMap的数组table长度一定是2的整次幂。
首先我们先从构造方法来分析HashMap的初始化长度:
HashMap中有4个构造方法
我们来看看他们分别都是什么
1 . HashMap();
无参的构造函数,从注释中我们可以看出,如果我们不指定初始长度,那么数组的初始长度就是默认的长度,是一个静态常量DEFAULT_INITIAL_CAPACITY = 16;
emmm确实是2的4次幂,但是不能说明任何问题;我们继续看
2 . HashMap(int initialCapacity)
诶,我们找到了了一个有一个参数的构造方法,并且这个参数就是用来指定我们数组的初始化长度的,那么我们如果给它一个不是2的整次幂的值,它是咋办的呢,因为这个方法调用了另外一个方法,我们想知道还得看一下这个里面的构造方法,