2014-10-09 10 views
7

Qualcuno può farmi sapere qual è l'utilizzo in tempo reale di un Iterator vuoto in java? Sono curioso di sapere perché è necessario? cose come,Uso di 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.. 

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

+0

Spiacente il link indicato come 'possibile duplicato di' non rispondere alla mia domanda o può essere non riuscivo a capire la risposta. Qualcuno può approfondire - a quale scenario sono necessari? – user3366706

+0

La domanda risponde in realtà: 'Voglio restituire un iteratore" vuoto "in questo caso, quindi i miei chiamanti non devono eseguire il test per null' :) –

+0

ok grazie :) inconsapevolmente ho risposto a questo (http: // stackoverflow .com/questions/821536/java-iterator-over-an-vuoto-raccolta-di-un-tipo-parametrico) domanda nel nome di una nuova domanda! Quindi questa domanda può essere etichettata come una risposta duplicata. non come una domanda duplicata. Sto scherzando, senza offesa. – user3366706

risposta

7

Si può usare nei casi in cui API di implementare richiede un acquisto logica iteratore si tradurrà con risultato vuoto. Quindi, invece di restituire un valore null, si restituisce un iteratore vuoto. Come anche tu puoi usarlo per risparmiare memoria e per scopi di test.

Esempio che impediscono nullo in reso e salva certa memoria allo stesso tempo:

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 classe sopra, quindi campo items non viene inizializzata finché viene aggiunto un elemento. Quindi, per fornire un comportamento previsto nel metodo items(), restituiamo un iteratore vuoto. Il vantaggio di questo sono i seguenti:

  • Più piccolo consumo di memoria:
    • La classe allocare la memoria quando è realmente necessario
  • Più piccolo di memoria mutazione
    • Fino a quando aggiungiamo qualcosa all'oggetto , non creiamo mai nuove istanze di iteratore.
  • Non abbiamo mai restituire null