Domanda

Stavo esaminando la documentazione Java e mi sono imbattuto nel metodo clear () di ArrayLists.

A che cosa serve questo, invece di riassegnare semplicemente un nuovo oggetto ArrayList alla variabile?

È stato utile?

Soluzione

Poiché potrebbero esserci più riferimenti a un elenco, potrebbe essere preferibile e / o più pratico cancellarlo rispetto alla riassegnazione di tutti i riferimenti.

Se si svuota molto l'array (all'interno, diciamo, di un loop di grandi dimensioni) non ha senso creare molti oggetti temporanei. Sicuramente il Garbage Collector alla fine li ripulirà, ma non ha senso sprecare risorse se non devi esserlo.

E poiché cancellare l'elenco è meno lavoro che crearne uno nuovo.

Altri suggerimenti

Potresti avere un campo finale (variabile di classe) Elenco :

private final List<Thing> things = ...

Da qualche parte nella classe vuoi cancellare (rimuovere tutto) le cose. Poiché cose è definitivo, non può essere riassegnato. Inoltre, probabilmente non vorrai riassegnare una nuova istanza dell'elenco poiché hai già un'istanza di elenco perfettamente valida.

Immagina la situazione in cui vi sono più riferimenti dello stesso java.util.ArrayList in tutto il tuo codice. Sarebbe quasi impossibile o molto difficile creare una nuova istanza dell'elenco e assegnarla a tutte le variabili. Ma java.util.ArrayList.clear () fa il trucco!

Paghi meno con clear di quanto fai con la creazione di un nuovo oggetto se il tuo obiettivo era quello di chiarire davvero.

La riassegnazione di un riferimento non cancella l'oggetto. Il presupposto è che se non ci fossero altri riferimenti ad esso, sarebbe recuperato dal GC relativamente presto. Altrimenti, ti sei appena incasinato.

Oltre ai motivi menzionati, cancellare un elenco è spesso più semanticamente corretto che crearne uno nuovo. Se il risultato desiderato è un elenco cancellato, l'azione da intraprendere è quella di cancellare l'elenco, non creare un nuovo elenco.

clear () non rialloca un nuovo oggetto, quindi ha un impatto minore sulle prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top