HashMap的容量为什么必须是2的幂?
(源码基于JDK1.7) HashMap的无参实例构造方法默认初始化容量是16(2的4次方)。如果我们使用指定初始化容量的实例构造函数,可以传入一个指定的值,但是实际HashMap在初始化底层存储数据的数组时,会使用一个大于等于指定值的2的幂的数作为数组的初始化容量。并且如果HashMap中元素的个数大于等于阈值并且根据key的哈希值和数组长度减一做按位与运算获取的数组下标位置元素非空,则需要扩容,扩容后容量是原来的2倍,也仍然是一个2的幂,那么HashMap为什么这样来做呢? 我们来从put(K key, V value)方法来一探究竟。先贴上put方法的源码: public V p
下载地址
用户评论