ArrayList源代码中容量检查IF条件的用途是什么

问题描述 投票:0回答:1

以下是ArrayListensureCapacityadd方法的源代码:

public boolean add(E e) {
    ensureCapacity(size + 1); // Increments modCount!!
    elementData[size++] = e;
    return true;
}

public void ensureCapacity(int minCapacity) {
    modCount++;
    int oldCapacity = elementData.length;
    if (minCapacity > oldCapacity) {
        Object oldData[] = elementData;
        int newCapacity = (oldCapacity * 3) / 2 + 1;
        if (newCapacity < minCapacity)
            newCapacity = minCapacity;
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}

现在,使用这段代码,我们几乎将容量加倍,当我们调用这个ensureCapacity方法时,它被称为ensureCapacity(size + 1);

因此,考虑到AL的总容量为10,并且给定的迭代当前大小为10,因此确保容量将被称为ensureCapacity(11),当此方法将被执行时,newCapacity将变为16并且minCapacity将为11,因此if (newCapacity < minCapacity)将返回FALSE ,每当AL的容量增加时,情况总是如此。

现在,如果if (newCapacity < minCapacity)总是返回FALSE那么这个IF条件的用途是什么。我知道JDK源代码经过了大量的同行评审,所以很有可能我错过了一些东西,请帮我确定这个IF条件的目的。

java arraylist
1个回答
2
投票

你错过了ensureCapacity方法将从addAll ArrayListpublic boolean addAll(Collection<? extends E> c) {方法调用ensureCapacity(size + numNew);,并且像numNew一样被调用的场景,这里if (newCapacity < minCapacity)可能是非常高的数量,这使得qazxswpoi可能会返回TRUE。

© www.soinside.com 2019 - 2024. All rights reserved.