Disons que j'ai un ArrayList<String> data;
J'ajoute des données dans ce tableau, en utilisant la fonction data.add()
. Disons que j'ai ajouté 10 chaînes dans ce tableau. La taille du tableau est 10 maintenant.
Comment puis-je détruire tous les éléments du tableau? La fonction data.clear()
vient de définir les 10 éléments sur null. Donc, lorsque j'essaie d'ajouter un autre élément, il se place simplement sur la position 11. Je veux juste recommencer à 0;
Je peux utiliser une boucle for pour remplacer toutes les données, mais je pense vraiment qu'il existe un moyen de vider le ArrayList
. Est ce
Vos hypothèses ne semblent pas être correctes. Après une clear()
, les données nouvellement ajoutées commencent à l’index 0.
En cas de doute, jetez un coup d'œil au code source de JDK.
ArrayList.clear()
code source:
public void clear() {
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
Vous verrez que size
est défini sur 0 et que vous partez de 0.
Veuillez noter que lors de l’ajout d’éléments à ArrayList
, le tableau principal est étendu (c’est-à-dire que les données du tableau sont copiées dans un tableau plus grand si nécessaire) afin de pouvoir ajouter de nouveaux éléments. Lorsque vous exécutez ArrayList.clear()
, vous supprimez uniquement les références aux éléments du tableau et définissez size
sur 0; toutefois, capacity
reste inchangé.
ArrayList.clear (De Java Doc ):
Supprime tous les éléments de cette liste. La liste sera vide après le retour de cet appel
Après data.clear()
, il recommencera à zéro.
data.removeAll(data);
fera le travail, je pense.
ce n'est pas vrai que la fonction clear()
efface la liste et commence à partir de l'index 0
Le code source de clear indique la raison pour laquelle les données nouvellement ajoutées obtiennent la première position.
public void clear() {
modCount++;
// Let gc do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}
clear () est plus rapide que removeAll () en passant, le premier est O(n) alors que le dernier est O (n_2)