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?
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 numMoved
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;
}
Il suffit simplement d'utiliser.
arraylist.remove(arraylist.size() - 1)