2009-05-05 10 views
5

Ich habe die Java-Dokumentation durchgesehen und bin auf die clear() -Methode von ArrayLists gestoßen.Nützlichkeit von ArrayList <E> .clear()?

Was nutzt dies, im Gegensatz zur einfachen Zuweisung eines neuen ArrayList-Objekts an die Variable?

+0

Beachten Sie, dass die clear() - Methode von Collection definiert ist. Es ist auch in der Map-Oberfläche vorhanden. –

Antwort

14

Da mehrere Verweise auf die eine Liste vorhanden sein können, ist es möglicherweise besser und/oder praktischer, sie zu löschen, als alle Verweise neu zuzuweisen.

Wenn Sie Ihr Array viel leeren (zB innerhalb einer großen Schleife), ist es nicht sinnvoll, viele temporäre Objekte zu erstellen. Sicher, der Müllsammler wird sie schließlich aufräumen, aber es hat keinen Sinn, mit Ressourcen verschwenderisch zu sein, wenn Sie es nicht sein müssen.

Und weil das Löschen der Liste ist weniger Arbeit als das Erstellen einer neuen.

+3

Tatsächlich gibt es Fälle, in denen die Wiederverwendung einer Sammlung Speicherprobleme verursachen kann. Kurz gesagt, wenn eine große ArrayList (oder Ähnliches) für eine lange Zeit herumgehalten wird, wird sie zur Dauergenerierung befördert. Dann können alle Elemente, die in der jungen Generation Müll enthalten, nicht ohne eine vollständige Generation gesammelt werden (die die Dauergeneration analysiert und erkennen kann, dass die Elemente wirklich Müll sind). – erickson

1

Mit clear() wird ein neues Objekt nicht neu zugewiesen, daher ist es weniger leistungsabhängig.

2

Stellen Sie sich die Situation vor, in der mehrere Referenzen desselben java.util.ArrayList in Ihrem Code vorhanden sind. Es wäre fast unmöglich oder sehr schwierig, eine neue Instanz der Liste zu erstellen und allen Variablen zuzuordnen. Aber java.util.ArrayList.clear() macht den Trick!

private final List<Thing> things = ... 

Irgendwo in der Klasse, die Sie (entfernen Sie alle) Dinge löschen wollen:

3

Sie könnten eine letzte Feld (Klassenvariable) List haben. Da things endgültig ist, kann es nicht neu zugewiesen werden. Darüber hinaus möchten Sie wahrscheinlich keine neue Listeninstanz neu zuweisen, da Sie bereits eine vollkommen gute Liste instanziiert haben.

2

Sie zahlen weniger mit klar als Sie mit dem Erstellen eines neuen Objekts, wenn Ihr Ziel wirklich klar war.

Beim Neuzuweisen einer Referenz wird das Objekt nicht gelöscht. Die Annahme ist, dass, wenn es keine anderen Verweise darauf gibt, es von der GC relativ bald zurückverlangt wird. Sonst hast du gerade ein Chaos bekommen.

2

Zusätzlich zu den genannten Gründen ist das Löschen einer Liste oft semantisch korrekter als das Erstellen einer neuen. Wenn das gewünschte Ergebnis eine gelöschte Liste ist, sollten Sie die Liste löschen und keine neue Liste erstellen.

Verwandte Themen