2015-11-17 2 views
5

ここにソースコードがあります:Arraylist.remove(int index)のソースコードにこのスニペットは不要ですか?

このリストの指定された位置にある要素を削除します。後続の要素を左にシフトします(インデックスから1を引く)。 パラメータ: インデックス要素のインデックスを削除する 戻り値: リスト から削除された要素例外: 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)として

のインデックス<のサイズがであることを既に保証している場合は、if (numMoved > 0)を確認する必要がありますか?

答えて

6

numMovedは0にすることができます(list.remove(list.size()-1)を呼び出して最後の要素を削除する場合)。この場合、arraycopyは不要です。したがって、if (numMoved > 0)が必要です。

5

あなたがリストの最後の要素を削除すると、indexnumMovedが0であると何System.arraycopyが必要とされていない場合には、size - 1に等しいです。

関連する問題