2014-06-26 69 views

回答

0

Implementation of remove

public E More ...remove(int index) { 
    rangeCheck(index); 

    modCount++; 
    E oldValue = elementData(index); 

    int numMoved = size - index - 1; 
    if (numMoved > 0) 
     System.arraycopy(elementData, index+1, elementData, index, 
          numMoved); 
    elementData[--size] = null; // Let gc do its work 

    return oldValue; 
} 

的值被存储在数组中,因此,如果是最后一个被除去,只在阵列中的值设置为空(elementData中[ - 尺寸] =空)。但是如果它在别的地方,它需要使用arraycopy来移动它后面的所有元素。所以在上面的代码中可以清楚地看到:index = size - 1意味着arraycopy调用(使用额外的时间)。

1

ArrayList元素驻留在连续的内存位置。

因此,当您删除第一个元素时,必须移动从2到n的所有元素。

E.g.如果从[1,2,3,4]中删除1,则必须将2,3和4移到左侧以保持连续的内存分配。

这使它慢一点。

另一方面,如果删除最后一个元素,则不需要移位,因为所有其余元素都在适当的位置。

相关问题