Suppression du dernier objet de ArrayList en Java


Je veux supprimer le dernier objet d'un ArrayList rapidement.

Je sais que remove(Object O) prend O(n) dans un ArrayList, mais je me demande s'il est possible de le faire en temps constant puisque je veux juste supprimer le dernier objet?

Author: Alexander Farber, 2013-06-07

1 answers

Voir la documentation pour ArrayList#remove(int), comme dans la syntaxe suivante:

list.remove(list.size() - 1)

Voici comment il est implémenté. elementData fait une recherche sur le tableau de sauvegarde (afin qu'il puisse le détacher du tableau), ce qui devrait être un temps constant (puisque la JVM connaît la taille d'une référence d'objet et le nombre d'entrées qu'elle peut calculer le décalage), et numMoved est 0 pour ce cas:

public E remove(int index) {
    rangeCheck(index); // throws an exception if out of bounds

    modCount++;        // each time a structural change happens
                       // used for ConcurrentModificationExceptions

    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;
}
 58
Author: Nathan Hughes, 2013-06-07 16:08:35