这是源代码:
删除此列表中指定位置的元素。将任何后续元素向左移位(从索引中减去一个)。 参数: 索引要删除的元素的索引 返回: 从列表中删除的元素 抛出: java.lang.IndexOutOfBoundsException
public E 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;
}
我的问题是:
由于rangeCheck(index)已经保证 index<尺寸,是否需要检查if (numMoved > 0)
?
答案 0 :(得分:6)
numMoved
可以为0(如果您通过调用list.remove(list.size()-1)
删除最后一个元素),在这种情况下不需要arraycopy
。因此if (numMoved > 0)
是必要的。
答案 1 :(得分:5)
当您删除列表的最后一个元素时,index
等于size - 1
,在这种情况下numMoved
为0且不需要System.arraycopy
。