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

ListIterator listite = List.listIterator(); 

Możemy użyć Iterator przechodzić do Set lub List lub Map. Ale ListIterator może być używany tylko do przechodzenia przez List, nie może przechodzić przez Set. Czemu?Różnica między Iterator i Listiterator?

Wiem, że główną różnicą jest to, że z iteratorem możemy podróżować tylko w jednym kierunku, ale dzięki ListIterator możemy podróżować w obu kierunkach. Czy są jakieś inne różnice? I wszelkie zalety ListIterator przez Iterator?

+0

oprócz odpowiedzi Petersa Polecam przeczytać rozdział o myśleniu w języku Java o iteratorach z wszystkimi ładnymi przykładami tam: – ant

+0

Zobacz także: http: //www.java67.com/2016/09/5-difference- between-iterator-and-ListIterator-in-java.html – roottraveller

Odpowiedz

124

Różnice są wymienione w Javadoc dla ListIterator

Można

  • iteracji wstecznej
  • uzyskać iteracyjnej w dowolnym momencie.
  • dodać nową wartość w dowolnym punkcie.
  • ustaw nową wartość w tym punkcie.
+61

A powód, dla którego nie możesz tego zrobić z "Setem" jest prosty: Nie ma "aktualnego punktu": Elementy nie mają indeksu i nie ma pożytecznego sposobu możesz dodać element "przed" lub "po" innym. –

+0

@Peter Lawrey ** uzyskaj indeks w dowolnym momencie ** - Czy chodzi o metody * previousIndex() * i * nextIndex() *? – gstackoverflow

+2

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

31

Są dwie różnice:

  1. Możemy użyć Iterator przemierzać Set i listy, a także typu obiektów na mapie. Podczas gdy ListIterator może być używany do przechodzenia dla obiektów typu List, ale nie dla typu Zestaw obiektów.

    Oznacza to, że możemy uzyskać za pomocą obiektu Iterator Set i List, zobacz tutaj:

    Korzystając Iterator możemy odzyskać elementy z kolekcji obiekt w jedynym kierunku do przodu.

    Metody Iterator:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator(); 
    Iterator iterator = List.iterator();
  2. Ale mamy obiekt ListIterator tylko z interfejsu, zobacz tutaj:

    gdzie jako ListIterator pozwala na przemierzanie w obu kierunkach (zarówno do przodu i do tyłu). Ma więc dwie inne metody, takie jak hasPrevious() i previous() inne niż w Iteratorze.Ponadto, możemy uzyskać indeksy następnych lub poprzednich elementów (używając nextIndex() i previousIndex() odpowiednio)

    Methods in ListIterator:

    1. hasNext()
    2. next()
    3. poprzedni()
    4. maPoprzedni()
    5. usuń()
    6. nextIndex()
    7. previousIndex()
    ListIterator listiterator = List.listIterator();

    to znaczy, że nie możemy dostać ListIterator przedmiot z zestawu interfejsu.

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

+30

Wygląda na to, że jest w większości wycięty i wklejony z http://kirankumarjava.blogspot.com/2013/06/what-is-difference-between-iterator-and.html. Zawsze musisz potwierdzić oryginalnego autora. –

15

Iterator jest super klasa ListIterator.

Tutaj są różnice między nimi:

  1. Z iterator można poruszać się tylko do przodu, ale z ListIterator można przenieść backword również podczas czytania elementów.
  2. Z ListIterator można uzyskać indeks w dowolnym momencie podczas przechodzenia, co nie jest możliwe w przypadku iterator.
  3. Z iterator można sprawdzić tylko następny element dostępny lub nie, ale w listiterator można sprawdzić poprzednie i następne elementy.
  4. Dzięki listiterator możesz dodać nowy element w dowolnym momencie podczas przechodzenia. Nie jest możliwe z iterator.
  5. Z listiterator można modyfikować element podczas ruchu, co nie jest możliwe z iterator.

Iterator wygląd i:

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

ListIterator wygląd i:

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 I ListIterator Różnica

  1. Możemy używać Iteratora do przechodzenia między Set a List, a także typu Map obiektów. Ale Iterator listy może być używany do przechodzenia dla obiektów typu List, ale nie dla typu Zestaw obiektów.

Oznacza to, że możemy uzyskać obiekt Iterrator za pomocą Set i List, zobacz tutaj:

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

Ale mamy obiekt Lista Iterator tylko z interfejsem, zobacz tutaj:

ListIterator listite = List.listIterator(); 

tzn. Nie można pobrać obiektu Iterator listy z interfejsu zestawu.

  1. Używając Iteratora, możemy pobierać elementy z obiektu zbierania tylko w kierunku do przodu.

    • gdzie jako Iterator listy, który pozwala na przemierzanie w obu kierunkach. To jest Iteratory listy przemierzają dwa kierunki. Więc ma inne metody niż Iterator.
+1

Powtórzyłeś pytanie, ale tak naprawdę nie odpowiedziałeś. –

2

Zalety ListIterator nad Iterator to możemy dodać elementu w dowolnym momencie podczas przechodzenia listy za pomocą ListIterator.