2015-11-17 12 views
5

Ecco il codice sorgente:Questo snippet non è necessario nel codice sorgente di Arraylist.remove (int index)?

Rimuove l'elemento nella posizione specificata in questo elenco. Sposta tutti gli elementi successivi a sinistra (sottrae uno dai loro indici). Parametri: index l'indice dell'elemento da essere rimosso Restituisce: l'elemento che è stato rimosso dalla lista Produce: 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; 
} 

La mia domanda è:

Come il rangeCheck(index) ha già garantito che indice < dimensioni, è necessario verificare che if (numMoved > 0)?

risposta

6

numMoved può essere 0 (se si rimuove l'ultimo elemento chiamando list.remove(list.size()-1)), nel qual caso non è necessario arraycopy. Pertanto è necessario il if (numMoved > 0).

5

Quando si rimuove l'ultimo elemento della lista, index è pari a size - 1, nel qual caso numMoved è 0 e non è necessaria alcuna System.arraycopy.

Problemi correlati