如题,我的map很小,不想浪费空间,想用参数设成5个,如下
Map<String,String> m = new HashMap<String,String>(6);但执行的时候却给分配了8个key=value的空间。经测试参数小于等于8的时候都是给分配8个。 而当参数为9的时候又给分配了16个!彻底晕了,请问怎么写这个初始化参数才能得到我想要的大小? 比如一个capacity小于5个Map
Map<String,String> m = new HashMap<String,String>(6);但执行的时候却给分配了8个key=value的空间。经测试参数小于等于8的时候都是给分配8个。 而当参数为9的时候又给分配了16个!彻底晕了,请问怎么写这个初始化参数才能得到我想要的大小? 比如一个capacity小于5个Map
HashMap(int initialCapacity )的默认加载因子是0.75你用HashMap(int initialCapacity, int loadFactor)来构造一个Map实例,指定loadFactor为1就可以了
为了提高效率,Map的容量会是2的幂
假如构造方法中传的是initialCapacity,内部其实这样的:
// Find a power of 2 >= initialCapacity
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
所以真正的大小一定是大于等于initialCapacity最小的2的幂