ArrayList源代码中容量检查IF条件的用途是什么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayList源代码中容量检查IF条件的用途是什么相关的知识,希望对你有一定的参考价值。
以下是ArrayList
的ensureCapacity
和add
方法的源代码:
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条件的目的。
你错过了ensureCapacity
方法将从addAll
ArrayList
的public boolean addAll(Collection<? extends E> c) {
方法调用ensureCapacity(size + numNew);
,并且像numNew
一样被调用的场景,这里if (newCapacity < minCapacity)
可能是非常高的数量,这使得qazxswpoi可能会返回TRUE。
以上是关于ArrayList源代码中容量检查IF条件的用途是什么的主要内容,如果未能解决你的问题,请参考以下文章