Frage

Ich war auf der Suche durch die Java-Dokumentation, und ich kam in dem klaren () -Methode von Arraylisten.

Was ist die Verwendung dieser, im Gegensatz zu einfach ein neues Arraylist-Objekt auf die Variable Neuzuweisung?

War es hilfreich?

Lösung

Da es möglicherweise mehrere Verweise auf die eine Liste sein, könnte es vorteilhaft sein, und / oder praktischer um es zu löschen, als alle Verweise Neuzuweisung.

Wenn Sie Ihr Array eine Menge leer (in, sagen wir, eine große Schleife) gibt es keinen Grund viele temporäre Objekte zu schaffen. Sicher, dass der Kollektor Müll wird sie schließlich aufzuräumen, aber es hat keinen Sinn, mit Ressourcen verschwenderisch zu sein, wenn Sie nicht sein müssen.

Und weil die Liste Clearing ist weniger Arbeit als einen neuen zu erstellen.

Andere Tipps

Sie können eine letzte Feld (Klassenvariable) List haben:

private final List<Thing> things = ...

Irgendwo in der Klasse, die Sie (entfernen Sie alle) Dinge löschen möchten. Da things endgültig ist, kann es nicht neu zugewiesen werden. Darüber hinaus werden Sie wahrscheinlich nicht wollen, eine neue List-Instanz neu zuweisen, wie Sie bereits eine ganz gute Liste instanziiert haben.

, um die Situation vor, in der es mehr Referenzen des gleichen java.util.ArrayList im gesamten Code ist. Es wäre fast unmöglich oder sehr schwierig sein, neue Instanz der Liste zu erstellen und zu allen Variablen zuweisen. Aber java.util.ArrayList.clear() funktioniert der Trick!

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

eine Referenz Neuzuweisung löscht das Objekt nicht. Die Annahme ist, dass, wenn es keine anderen Verweise auf sie sind, wäre es relativ bald nach der GC zurückgewonnen werden. Ansonsten hast du dich nur ein Chaos.

Neben den genannten Gründen eine Liste Clearing ist oft mehr semantisch korrekt, als einen neuen zu schaffen. Wenn Ihr gewünschtes Ergebnis eine geräumter Liste ist, die Aktion, die Sie ergreifen sollen die Liste zu löschen, nicht eine neue Liste erstellen.

clear () kein neues Objekt neu zuteilen, so ist es weniger ein Performance-Einbußen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top