web-dev-qa-db-fra.com

Java ArrayList, fonction clear ()

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

33
artouiros

Vos hypothèses ne semblent pas être correctes. Après une clear(), les données nouvellement ajoutées commencent à l’index 0.

65
Dan D.

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é.

26
Tom

ArrayList.clear (De Java Doc ):

Supprime tous les éléments de cette liste. La liste sera vide après le retour de cet appel

10
Hui Zheng

Après data.clear(), il recommencera à zéro.

9
NIkhil Gupta

data.removeAll(data); fera le travail, je pense.

8
Juvanis

ce n'est pas vrai que la fonction clear() efface la liste et commence à partir de l'index 0

5
Alya'a Gamal

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)

3
fatma.ekici