Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList源代码中的容量检查IF条件有什么用途_Java_Arraylist - Fatal编程技术网

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

Java ArrayList源代码中的容量检查IF条件有什么用途,java,arraylist,Java,Arraylist,以下是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

以下是
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);
    }
}
public boolean add(E){
ensureCapacity(大小+1);//递增modCount!!
elementData[size++]=e;
返回true;
}
公共空间容量(国际最小容量){
modCount++;
int oldCapacity=elementData.length;
如果(最小容量>旧容量){
对象oldData[]=elementData;
int newCapacity=(旧容量*3)/2+1;
if(新容量<最小容量)
新容量=最小容量;
//minCapacity通常接近大小,因此这是一个胜利:
elementData=Arrays.copyOf(elementData,newCapacity);
}
}
现在,有了这个代码,我们的容量几乎翻了一番,当我们调用这个
ensureCapacity
方法时,它被称为
ensureCapacity(size+1)

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


现在,如果
if(newCapacity
总是返回FALSE,那么这个if条件有什么用呢。我知道JDK源代码经过了大量的同行评审,因此我很可能遗漏了一些内容,请帮助我确定此IF条件的目的。

您错过了将从
addAll的
addAll
方法调用
ArrayList
类似
public boolean addAll的
方法时的场景(收集您错过了将从
addAll
method的
ArrayList
调用
ensureCapacity
方法的场景,如
public boolean addAll(CollectionI还猜测,当项目被删除时,ArrayList不会收缩removed@LanceTothArrayList不会收缩,当项目从数组列表中移除时,特定索引将开始指向
NULL
。当然,所有后续项目都将被移动以修复此问题,但“内存分配”除外不会更改?我不确定您所说的“内存分配不会更改”是什么意思。当动态调整数组列表的大小时,将使用
Arrays.copyOf(elementData,newCapacity)为数组列表分配更多内存
我还想,当项目被删除时,ArrayList不会收缩removed@LanceTothArrayList不会收缩,当项目从数组列表中移除时,特定索引将开始指向
NULL
。当然,所有后续项目都将被移动以修复此问题,但“内存分配”除外不会更改?我不确定您所说的“内存分配不会更改”是什么意思。当动态调整数组列表的大小时,将使用
数组为数组列表分配更多内存。copyOf(elementData,newCapacity);