È possibile utilizzare entrambi con risultati simili.
Una risposta precedente rileva che clear
richiede tempo costante in un'implementazione di una mappa matura. Senza verificare il codice sorgente di Mi Piace di HashMap
, TreeMap
, ConcurrentHashMap
, mi aspetto che il loro metodo clear
richieda un tempo costante, più i costi di raccolta dei dati inutili amortized.
Un altro poster rileva che una mappa condivisa non può essere annullata. Bene, può farlo se lo vuoi, ma lo fai usando un oggetto proxy che incapsula una mappa corretta e lo annulla quando necessario. Ovviamente, dovresti implementare la classe della mappa proxy tu stesso.
Map<Foo, Bar> myMap = new ProxyMap<Foo, Bar>();
// Internally, the above object holds a reference to a proper map,
// for example, a hash map. Furthermore, this delegates all calls
// to the underlying map. A true proxy.
myMap.clear();
// The clear method simply reinitializes the underlying map.
A meno che non hai fatto qualcosa di simile a quanto sopra, clear
e nulling out sono equivalenti nei modi che contano, ma penso che sia più maturo di assumere la vostra mappa, anche se non attualmente condiviso, può diventare condivisa in un secondo tempo dovuto a forze che non puoi prevedere.
C'è un altro motivo per clear
invece di annullare l'operazione, anche se la mappa non è condivisa. La tua mappa può essere istanziata da un client esterno, come un factory, quindi se si cancella la mappa annullandola, si potrebbe finire coupling personalmente alla fabbrica inutilmente. Perché l'oggetto che cancella la mappa deve sapere che istanziate le vostre mappe usando Guava Maps.newHashMap()
con Dio sa quali parametri? Anche se questa non è una preoccupazione realistica nel tuo progetto, vale comunque la pena di allinearti a pratiche mature.
Per i motivi di cui sopra, e a parità di tutti gli altri, vorrei votare per clear
.
HTH.
dalla riga "Ad esempio, se crei una mappa, assegnala a diversi oggetti ..." intendi per Mappa generica (Mappa)? –
Woody
@Woody Voglio dire creare una classe che implementa l'interfaccia 'Mappa - a' HashMap 'o una' TreeMap '. –
dasblinkenlight
@Woody - Non vedo perché sarebbe importante. Vuol dire che se ci sono diversi oggetti che hanno un riferimento alla mappa originale, allora probabilmente dovresti usare 'clear()' invece di azzerare la mappa (l'impostazione di un riferimento alla mappa su null non avrà alcun effetto su tutti gli altri riferimenti alla stessa mappa). – jahroy