web-dev-qa-db-fra.com

Supprimer le dernier objet de ArrayList en Java

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

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

29

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

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

Voici comment cela est implémenté. elementData effectue une recherche sur le tableau de support (afin qu'il puisse le séparer du tableau), ce qui doit être une valeur constante (puisque la machine virtuelle connaît la taille d'une référence d'objet et le nombre d'entrées avec lesquelles elle peut calculer le décalage), et numMoved0 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;
}

Il suffit simplement d'utiliser.

arraylist.remove(arraylist.size() - 1)
0
Deva