Question

Je parcourais la documentation Java et je suis tombé sur la méthode clear () de ArrayLists.

Quelle est l'utilisation de ceci, par opposition à la simple réaffectation d'un nouvel objet ArrayList à la variable?

Était-ce utile?

La solution

Étant donné qu'il peut y avoir plusieurs références à la même liste, il peut être préférable et / ou plus pratique de la supprimer que de réaffecter toutes les références.

Si vous videz beaucoup votre tableau (dans une grande boucle, par exemple), il ne sert à rien de créer beaucoup d'objets temporaires. Bien sûr, le récupérateur de déchets finira par les nettoyer, mais inutile de gaspiller des ressources si vous n’êtes pas obligé de le faire.

Et parce qu'effacer la liste est moins fastidieux que d'en créer un nouveau.

Autres conseils

Vous pourriez avoir un dernier champ (variable de classe) Liste :

private final List<Thing> things = ...

Quelque part dans la classe, vous souhaitez effacer (supprimer tout) des choses. Puisque choses est final, il ne peut pas être réaffecté. De plus, vous ne voudrez probablement pas réaffecter une nouvelle instance de liste car vous avez déjà une liste parfaitement instanciée.

Imaginez le cas où il existe plusieurs références du même java.util.ArrayList dans votre code. Il serait presque impossible ou très difficile de créer une nouvelle instance de la liste et d’affecter celle-ci à toutes les variables. Mais java.util.ArrayList.clear () fait l'affaire!

Vous payez moins avec clair qu'avec la création d'un nouvel objet si votre objectif était de vraiment nettoyer.

La réaffectation d'une référence n'efface pas l'objet. L'hypothèse est que s'il n'y avait pas d'autres références à cela, le GC le récupérerait assez rapidement. Sinon, vous venez de vous faire un désordre.

Outre les raisons évoquées, effacer une liste est souvent plus correct sémantiquement que d’en créer une nouvelle. Si le résultat souhaité est une liste effacée, vous devez effacer la liste et non en créer une nouvelle.

clear () ne réalloue pas un nouvel objet, il est donc moins performant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top