一、jdk1.8中,对“HashMap的容量一定是2的n次幂”做了严格控制
1.默认初始容量
2.使用HashMap的有参构造函数来自定义容量的大小(保证容量是2的n次幂)
3.扩容:同样需要保证扩容后的容量是2的n次幂( jdk1.8 HashMap.resize()扩容方法的源码解析)
二、为什么HashMap的容量一定要是2的n次幂?或者说,保证“HashMap的容量一定是2的n次幂”有什么好处?
1.关系到元素在桶中的位置计算问题
2.关系到扩容后元素在newCap中的放置问题
2.1 源码解析
2.2 深入分析(含图解)
一、jdk1.8中,对“HashMap的容量一定要是2的n次幂”做了严格控制
1.默认初始容量:
/** * The default initial capacity - MUST be a power of two.(默认初始容量——必须是2的n次幂。) */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16(16 = 2^4)