2012-06-11 19 views
109
Iterator ite = Set.iterator(); 
Iterator ite = List.iterator(); 

ListIterator listite = List.listIterator(); 

Possiamo usare Iterator per attraversare un Set o un List o un Map. Ma ListIterator può essere utilizzato solo per attraversare un List, non può attraversare un Set. Perché?Differenza tra Iterator e Listiterator?

So che la differenza principale è che con iteratore possiamo viaggiare in una sola direzione ma con ListIterator possiamo viaggiare in entrambe le direzioni. Ci sono altre differenze? E tutti i vantaggi di ListIterator su Iterator?

+0

in aggiunta alla risposta di Peters Vi raccomando di leggere un capitolo su come pensare in java sugli iteratori con tutti i bei esempi in questo numero – ant

+0

vedere anche questo: http: //www.java67.com/2016/09/5-difference- between-iterator-and-ListIterator-in-java.html – roottraveller

risposta

124

Le differenze sono elencate nella Javadoc per ListIterator

È possibile

  • iterate indietro
  • ottenere l'iteratore in qualsiasi punto.
  • aggiungere un nuovo valore in qualsiasi punto.
  • impostare un nuovo valore in quel punto.
+61

E il motivo per cui non è possibile farlo con un 'Set' è semplice: non c'è" punto corrente ": gli elementi non hanno indice e non c'è un modo utile puoi aggiungere un elemento "prima" o "dopo" un altro. –

+0

@Peter Lawrey ** ottiene l'indice in qualsiasi momento ** - Riguarda i metodi * previousIndex() * and * nextIndex() *? – gstackoverflow

+2

@gstackoverflow check java.util.List # listIterator (int) – kilonet

31

ci sono due differenze:

  1. Possiamo usare Iterator per attraversare Set e List e anche il tipo di oggetti Mappa. Mentre un ListIterator può essere utilizzato per attraversare oggetti di tipo List, ma non per Set-type of Objects.

    Cioè, siamo in grado di ottenere un oggetto Iterator utilizzando Set e List, vedere qui:

    Utilizzando Iterator possiamo recuperare gli elementi dalla collezione di oggetti in unica direzione in avanti.

    Methods in Iterator:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator(); 
    Iterator iterator = List.iterator();
  2. Ma otteniamo oggetto ListIterator solo dall'interfaccia lista, vedere qui:

    dove come ListIterator consente di spostarsi in entrambe le direzioni (Sia in avanti che indietro). Quindi ha altri due metodi come hasPrevious() e previous() diversi da quelli di Iterator.Inoltre, siamo in grado di ottenere gli indici degli elementi precedenti o successive (utilizzando nextIndex() e previousIndex() rispettivamente)

    Methods in ListIterator:

    1. hasNext()
    2. successivo()
    3. precedente()
    4. hasPrevious()
    5. remove()
    6. nextIndex()
    7. previousIndex()
    ListIterator listiterator = List.listIterator();

    vale a dire, non siamo in grado di ottenere l'oggetto ListIterator da Set interfaccia.

Riferimento: - What is the difference between Iterator and ListIterator ?

+30

Sembra che sia in gran parte troncato da http://kirankumarjava.blogspot.com/2013/06/what-is-difference-between-iterator-and.html. Devi sempre riconoscere l'autore originale. –

15

Iterator è super classe di ListIterator.

Qui ci sono le differenze tra di loro:

  1. Con iterator si può muovere solo in avanti, ma con ListIterator è possibile spostare backword anche durante la lettura degli elementi.
  2. Con ListIterator è possibile ottenere l'indice in qualsiasi momento mentre si attraversa, il che non è possibile con iterator s.
  3. Con iterator è possibile controllare solo per il prossimo elemento disponibile o meno, ma in listiterator è possibile controllare elementi precedenti e successivi.
  4. Con listiterator è possibile aggiungere un nuovo elemento in qualsiasi momento, mentre si attraversa. Non possibile con iterator.
  5. Con listiterator è possibile modificare un elemento mentre si attraversa, il che non è possibile con iterator.

aspetto Iterator and feel:

public interface Iterator<E> { 
    boolean hasNext(); 
    E next(); 
    void remove(); //optional-->use only once with next(), 
         dont use it when u use for:each 
    } 

aspetto ListIterator and feel:

public interface ListIterator<E> extends Iterator<E> { 
    boolean hasNext(); 
    E next(); 
    boolean hasPrevious(); 
    E previous(); 
    int nextIndex(); 
    int previousIndex(); 
    void remove(); //optional 
    void set(E e); //optional 
    void add(E e); //optional 
} 
1

Iterator E ListIterator Differenza

  1. Possiamo usare Iterator per attraversare Set e List e anche Map type of Objects. Ma List Iterator può essere utilizzato per attraversare oggetti di tipo List, ma non per Set type of Objects.

Cioè, siamo in grado di ottenere un oggetto Iterrator utilizzando Set e List, vedere qui:

Iterator ite = Set.iterator(); 
Iterator ite = List.iterator(); 

Ma otteniamo oggetto List Iterator solo da interfaccia List, vedere qui:

ListIterator listite = List.listIterator(); 

es., Non è possibile ottenere l'oggetto List Iterator dall'interfaccia Set.

  1. Utilizzando Iterator è possibile recuperare gli elementi dall'oggetto di raccolta solo in direzione avanti.

    • dove come List Iterator, che consente di attraversare in entrambe le direzioni. Quello è List Iterators attraversa due direzioni. Quindi ha altri metodi hasPrevious() & previous() diversi da Iterator.
+1

Hai ripetuto la domanda, ma in realtà non hai risposto. –

2

Vantaggi di ListIterator oltre Iterator è che possiamo aggiungere elementi in qualsiasi punto del tempo durante l'attraversamento un elenco utilizzando ListIterator.