SC-202004030939_20200907-潘旭

日志

问题:

​ 问题内容:capacity : 2 , size : 2 // size>1.5 ,为什么没扩容?

// 给定容量为2,默认加载因子0.75
public void grow() {
        int oldCapacity = elements.length;
        if (counter > oldCapacity * loadFactor) {
            int newCapacity = oldCapacity + (oldCapacity >> 1);  //(oldCapacity >> 1)是oldCapacity的一半
            Object[] array = new Object[newCapacity];
            Arrays.fill(array, PRESENT);
            System.arraycopy(elements, 0, array, 0, counter);
            elements = array;
        }

}
public void add(Object element) {
    grow(); 
    elements[counter] = element;
    counter++;
}
public int capacity() {
    return elements.length;
}

public int size() {
    return counter;
}

//  counter(size) > oldCapacity(2) * loadFactor(0.75)=1.5
//结果   
capacity : 2 , size : 1
capacity : 2 , size : 2   // size>1.5   
capacity : 3 , size : 3
capacity : 4 , size : 4
capacity : 6 , size : 5

​ 解决问题:

public void add(Object element) {
    grow();     //counter从0开始
    elements[counter] = element;//这里传入数组元素
    counter++;//counter自增
}
// 先开始的扩容,后增加的,而且counter是从开始的。
// 进入grow()方法时counter= 1, counter(1) < oldCapacity(2) * loadFactor(0.75)=1.5
// 输出的counter时自增后的。counter = 2。

吐槽:

​ 没有吐槽的!