如题,我的map很小,不想浪费空间,想用参数设成5个,如下
Map<String,String> m = new HashMap<String,String>(6);但执行的时候却给分配了8个key=value的空间。经测试参数小于等于8的时候都是给分配8个。 而当参数为9的时候又给分配了16个!彻底晕了,请问怎么写这个初始化参数才能得到我想要的大小? 比如一个capacity小于5个Map

解决方案 »

  1.   


    HashMap(int initialCapacity )的默认加载因子是0.75你用HashMap(int initialCapacity, int loadFactor)来构造一个Map实例,指定loadFactor为1就可以了
      

  2.   

    抱歉,第二个参数是float型的,写错了
      

  3.   

    默认大小是16
    为了提高效率,Map的容量会是2的幂
    假如构造方法中传的是initialCapacity,内部其实这样的:
    // Find a power of 2 >= initialCapacity
    int capacity = 1;
    while (capacity < initialCapacity)
          capacity <<= 1;
    所以真正的大小一定是大于等于initialCapacity最小的2的幂