Sie können beide mit ähnlichen Ergebnissen verwenden.
Eine vorherige Antwort merkt an, dass clear
erwartet wird, konstante Zeit in einer reifen Kartenimplementierung zu nehmen. Ohne Überprüfung des Quellcodes von Likes von HashMap
, TreeMap
, ConcurrentHashMap
, würde ich erwarten, dass ihre clear
Methode dauernde Zeit plus amortized Müllsammlungskosten dauert.
Ein anderes Poster weist darauf hin, dass eine freigegebene Karte nicht gelöscht werden kann. Nun, es kann, wenn Sie es wollen, aber Sie tun es, indem Sie ein proxy Objekt verwenden, das eine richtige Karte einkapselt und es bei Bedarf auf Null setzt. Natürlich müssten Sie die Proxy-Map-Klasse selbst implementieren.
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.
Es sei denn, du hast so etwas wie die oben, clear
und nulling sind aus entsprechenden Betrag in der Art und Weise, dass die Materie, aber ich denke, es reifere ist Ihre Karte zu übernehmen, auch wenn sie derzeit nicht geteilt wird, zu einem späteren geteilt werden könnte Zeit aufgrund von Kräften, die Sie nicht vorhersehen können.
Es gibt einen anderen Grund, clear
anstelle von Nullen, auch wenn die Karte nicht geteilt wird. Ihre Karte kann von einem externen Client instanziiert werden, z. B. factory. Wenn Sie Ihre Karte also löschen, indem Sie sie auf Null setzen, könnten Sie sich selbst unnötig in der Fabrik belassen coupling. Warum sollte das Objekt, das die Karte löscht, wissen, dass Sie Ihre Karten mit Guavas Maps.newHashMap()
mit Gott weiß welche Parameter instanziieren? Auch wenn dies in Ihrem Projekt kein realistisches Anliegen ist, lohnt es sich dennoch, sich an ausgereifte Praktiken zu orientieren.
Aus den oben genannten Gründen und unter sonst gleichen Bedingungen würde ich für clear
stimmen.
HTH.
aus der Zeile "Zum Beispiel, wenn Sie eine Karte erstellen, geben Sie es an mehrere Objekte ..." meinst du für generische Karte (Map)? –
Woody
@Woody Ich meine eine Klasse zu erstellen, die die 'Map' Schnittstelle implementiert - eine' HashMap 'oder eine' TreeMap '. –
dasblinkenlight
@Woody - Ich sehe nicht, warum es wichtig wäre. Er meint, dass, wenn mehrere Objekte einen Bezug auf die ursprüngliche Map haben, Sie wahrscheinlich 'clear()' anstelle der Nullung der Map verwenden müssen (wenn Sie einen Verweis auf die Map auf null setzen, wirkt sich dies nicht auf alle aus die anderen Referenzen auf die gleiche Karte). – jahroy