关于LinkedHashMap的加载因数和初始容量分配

关于LinkedHashMap的加载因子和初始容量分配

/** @param maxSize Maximum sum of the sizes of the Bitmaps in this cache */
public LruMemoryCache(int maxSize) {
if (maxSize <= 0) {
throw new IllegalArgumentException("maxSize <= 0");
}
this.maxSize = maxSize;
this.map = new LinkedHashMap<String, Bitmap>(0, 0.75f, true);
}


上面这段代码是github上面一个比较有名的开源项目中的一段,大概就是一个用LinkedHashMap来实现lru,我的问题LinkedHashMap构造函数的前2个参数,初始容量竟然是0?那加载因子0.75有何意义?据我所知,扩展容量时,是用初始容量*加载因子,这样的话,这个扩展的容量不是始终都是0了吗,初始也为0,扩展也为0,那这个hashmap还有何意义?不知道哪里理解错了
------解决思路----------------------
看看源码就知道了

其实第一个参数是你要设置的初始大小;而程序内部实际的初始大小是1;

如果你设置的初始大小(initialCapacity)小于1, 那么map大小就是默认的1;
否则会不断左移(乘2)直到capacity大于你设置的initialCapacity;

  public LinkedHashMap(int initialCapacity,
 float loadFactor,
                         boolean accessOrder) {
        super(initialCapacity, loadFactor);//这里调用父类HashMap的构造方法;
        this.accessOrder = accessOrder;
    }
 public HashMap(int initialCapacity, float loadFactor) {
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal initial capacity: " +
                                               initialCapacity);
        if (initialCapacity > MAXIMUM_CAPACITY)
            initialCapacity = MAXIMUM_CAPACITY;
        if (loadFactor <= 0 
------解决思路----------------------
 Float.isNaN(loadFactor))
            throw new IllegalArgumentException("Illegal load factor: " +
                                               loadFactor);

        // Find a power of 2 >= initialCapacity
        int capacity = 1;  // 默认是1
        while (capacity < initialCapacity)//不断翻倍直到大于人为设置的大小
            capacity <<= 1;

        this.loadFactor = loadFactor;
        threshold = (int)(capacity * loadFactor);//的确如你所言,后面如果需要增大长度,按照capacity*loadFactor取整后增长;
        table = new Entry[capacity];
        init();
    }