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

use*_*610 5 java arraylist

这是源代码:

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

我的问题是:

由于rangeCheck(索引)已经保证索引<size,是否有必要检查if (numMoved > 0)

Era*_*ran 6

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


Nie*_*len 5

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