2014-10-09 10 views
7

Kann mir jemand wissen, was ist die Echtzeit-Nutzung eines leeren Iterator in Java? Ich bin neugierig zu wissen, warum es benötigt wird? Dinge wieVerwendung von emptyIterator in Java

1. public static <T> Iterator<T> emptyIterator() 
2. public static <T> ListIterator<T> emptyListIterator() 
3. public static final <T> Set<T> emptySet(), etc.. 

Quelle: http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#emptyIterator()

+0

Leider den Link als ‚möglich Duplikat‘ erwähnt null zurück auf meine Frage antwortet nicht oder sein kann ich die Antwort nicht verstehen konnte. Kann jemand näher ausführen - in welchem ​​Szenario werden sie benötigt? – user3366706

+0

Die Frage beantwortet es tatsächlich: 'Ich möchte in diesem Fall einen" leeren "Iterator zurückgeben, damit meine Anrufer nicht auf Null prüfen müssen :) –

+0

ok danke :) unwissentlich antwortete ich darauf (http: // stackoverflow .com/questions/821536/java-iterator-über-eine-leere-sammlung-von-einem-parametrisierten-type) frage im namen einer Neuen Frage! So kann diese Frage als doppelte Antwort getaggt werden. nicht als doppelte Frage. Nur Spaß, nichts für ungut. – user3366706

Antwort

7

Sie können es in Fällen verwenden, in denen API, die Sie einen Iterator kaufen Logik mit leeren Ergebnis führt Umsetzung erfordert. Anstatt also eine Null zurückzugeben, geben Sie einen leeren Iterator zurück. Ebenso können Sie damit Speicherplatz und Testzwecke einsparen.

Beispiel der NULL als Rück verhindert und spart etwas Speicher zur gleichen Zeit:

class LazyObjectInitialization { 

    private Collection<String> items; 

    public final Iterator<String> items() { 

     if(items == null || items.isEmpty()) { 
     return Collections.emptyIterator(); 
     } 

     return items.iterator(); 
    } 

    public final add(String item) { 

     if(items == null) { 
     items = new ArrayList<>(); 
     } 

     items.add(item); 
    } 
} 

In obiger Klasse, dann Feld items nicht initialisiert, bis ein Element hinzugefügt wird. Um das erwartete Verhalten in der Methode items() bereitzustellen, geben wir einen leeren Iterator zurück. Der Vorteil hiervon ist wie folgt:

  • Kleinerer Speicherverbrauch:
    • Die Klasse Speicher zuweisen, wenn wirklich
    • benötigt wird
  • Kleinere Speicher Mutation
    • Bis wir etwas zum Objekt hinzufügen Wir erstellen niemals eine neue Iteratorinstanz.
  • Wir nie