2015-11-17 11 views
5

Oto kod źródłowy:Czy ten fragment kodu jest niepotrzebny w kodzie źródłowym pliku Arraylist.remove (indeks int)?

Usuwa element w określonej pozycji na tej liście. Przesuwa jakiekolwiek kolejne elementy po lewej stronie (odejmuje jeden od ich indeksów). Parametry: indeks indeks elementu do usunięcia Powroty: elementu, który został usunięty z listy Zgłasza: 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; 
} 

Moje pytanie brzmi:

Jak rangeCheck(index) już zagwarantował, że indeks < rozmiar, czy konieczne jest sprawdzenie, czy if (numMoved > 0)?

Odpowiedz

6

numMoved może być 0 (jeśli usuniesz ostatni element, wywołując list.remove(list.size()-1)), w takim przypadku nie jest wymagane arraycopy. Dlatego konieczny jest if (numMoved > 0).

5

Po usunięciu ostatniego elementu z listy index jest równy size - 1, w którym to przypadku numMoved ma wartość 0 i nie jest wymagane System.arraycopy.

Powiązane problemy