在某些我已经阅读过的内容中,删除第一个元素arrayList.remove(0);
比删除最后一个元素arrayList.remove(arrayList.size()-1);
要慢一些,请一些人提供详细说明。提前致谢
答案 0 :(得分:1)
在ArrayList
中,元素位于连续的内存位置。
因此,当您删除第一个元素时,必须移动从2到n的所有元素。
E.g。如果从[1,2,3,4]中删除1,则必须将2,3和4移到左侧以保持连续的内存分配。
这会让它慢一点。
另一方面,如果删除最后一个元素,则不需要移位,因为所有剩余元素都在适当的位置。
答案 1 :(得分:0)
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;
}
值存储在数组中,因此如果删除最后一个值,则只将数组中的值设置为null(elementData [ - size] = null)。但如果它在其他地方,它需要使用arraycopy来移动它之后的所有元素。因此,在上面的代码中,您可以清楚地看到: index = size - 1 表示arraycopy调用(使用的额外时间)。