这段代码是否在Arraylist.remove(int index)的源代码中是不必要的?

时间:2015-11-17 12:31:25

标签: java arraylist

这是源代码:

  

删除此列表中指定位置的元素。将任何后续元素向左移位(从索引中减去一个)。   参数:   索引要删除的元素的索引   返回:   从列表中删除的元素   抛出:   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)

2 个答案:

答案 0 :(得分:6)

numMoved可以为0(如果您通过调用list.remove(list.size()-1)删除最后一个元素),在这种情况下不需要arraycopy。因此if (numMoved > 0)是必要的。

答案 1 :(得分:5)

当您删除列表的最后一个元素时,index等于size - 1,在这种情况下numMoved为0且不需要System.arraycopy