2014-10-09 14 views
7

Czy ktoś może mi powiedzieć, jakie jest użycie w czasie rzeczywistym Empty Iterator w java? Jestem ciekaw, dlaczego jest potrzebny? takie rzeczy,Użycie emptyIterator w java

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

źródło: http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#emptyIterator()

+0

Sorry link wymieniony jako „możliwym duplikat” nie jest odpowiedź na moje pytanie czy może być nie mogłem zrozumieć odpowiedź. Czy ktoś może się zastanowić - w jakim scenariuszu są one potrzebne? – user3366706

+0

Pytanie brzmi: "Chcę zwrócić" pusty "iterator w takim przypadku, aby moi rozmówcy nie musieli sprawdzać wartości zerowej" :) –

+0

ok dzięki :) nieświadomie odpowiedziałem na to (http: // stackoverflow .pl/questions/821536/java-iterator-over-an-empty-collection-of-a-parametized-type) pytanie w imię nowego pytania! Tak więc to pytanie można oznaczyć jako duplikat odpowiedzi. nie jako duplikat pytania. Żartuję, bez obrazy. – user3366706

Odpowiedz

7

Można go używać w przypadkach API że wdrożenie wymaga kupna logikę iterator spowoduje pustym wyniku. Zamiast zwracania wartości pustej zwracamy pusty iterator. Jak również możesz go użyć, aby zaoszczędzić trochę pamięci i do celów testowych.

Przykład uniemożliwiające zerowy i zapisuje jako powrót część pamięci w tym samym czasie:

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); 
    } 
} 

podano klasy, to pole items nie intialized aż element został dodany. Aby zapewnić oczekiwane zachowanie w metodzie items(), zwracamy pusty iterator. Korzyść z tego są następujące:

  • Mniejsze zużycie pamięci:
    • Klasa przydzielić pamięci, gdy jest naprawdę potrzebne
  • Mniejsza mutacja pamięć
    • Dopóki coś dodać do obiektu , nigdy nie tworzymy nowej instancji iteratora.
  • nigdy Wracamy zerowej