Perbedaan antara Iterator dan Listiterator?

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

ListIterator listite = List.listIterator();

Kita dapat menggunakan Iteratoruntuk melintasi a Setatau a Listatau a Map. Tetapi ListIteratorhanya dapat digunakan untuk melintasi List, tidak dapat melintasi Set. Mengapa?

Saya tahu bahwa perbedaan utama adalah bahwa dengan iterator kita dapat melakukan perjalanan hanya dalam satu arah tetapi dengan ListIteratorkita dapat melakukan perjalanan kedua arah. Apakah ada perbedaan lain? Dan ada kelebihan ListIteratorlebih Iterator?

Siva
sumber
selain jawaban Peters saya akan merekomendasikan Anda membaca bab dalam berpikir di java tentang iterators dengan semua contoh yang bagus di sana
semut

Jawaban:

150

Perbedaannya tercantum dalam Javadoc for ListIterator

Kamu bisa

  • beralih ke belakang
  • dapatkan iterator kapan saja.
  • tambahkan nilai baru kapan saja.
  • atur nilai baru pada saat itu.
Peter Lawrey
sumber
68
Dan alasan mengapa Anda tidak dapat melakukannya dengan Setsederhana: Tidak ada "titik saat ini": Elemen tidak memiliki indeks dan tidak ada cara yang berguna Anda dapat menambahkan elemen "sebelum" atau "setelah" yang lain.
Joachim Sauer
@ Peter Lawrey memperoleh indeks pada setiap titik - Apakah itu tentang metode previousIndex () dan nextIndex () ?
gstackoverflow
2
@gstackoverflow periksa java.util.List # listIterator (int)
kilonet
4
@kilonet alih-alih mendapatkan indeks di titik mana pun , haruskah ini diucapkan seperti "dapatkan iterator di titik mana saja" untuk menghindari kebingungan?
Shailesh Pratapwar
39

Ada dua perbedaan:

  1. Kita dapat menggunakan Iterator untuk melintasi Set dan Daftar dan juga tipe Peta Objek. Sementara ListIterator dapat digunakan untuk melintasi untuk Objek tipe Daftar, tetapi tidak untuk Set-jenis Objek.

    Artinya, kita bisa mendapatkan objek Iterator dengan menggunakan Set and List, lihat di sini:

    Dengan menggunakan Iterator kita dapat mengambil elemen-elemen dari Object Collection dalam arah maju saja.

    Metode dalam Iterator:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  2. Tapi kami mendapatkan objek ListIterator hanya dari antarmuka Daftar, lihat di sini:

    dimana sebagai ListIterator memungkinkan Anda untuk melintasi di kedua arah (Baik maju dan mundur). Jadi ia memiliki dua metode seperti hasPrevious()dan previous()selain dari Iterator. Juga, kita bisa mendapatkan indeks elemen berikutnya atau sebelumnya (menggunakan nextIndex() danpreviousIndex() masing masing )

    Metode dalam ListIterator:

    1. hasNext ()
    2. lanjut()
    3. sebelumnya()
    4. hasPrevious ()
    5. menghapus()
    6. nextIndex ()
    7. indeks sebelumnya ()
    ListIterator listiterator = List.listIterator();

    yaitu, kita tidak bisa mendapatkan objek ListIterator dari antarmuka Set.

Referensi: - Apa perbedaan antara Iterator dan ListIterator?

Jaideep
sumber
39
Ini sepertinya sebagian besar dipotong dan disisipkan dari kirankumarjava.blogspot.com/2013/06/… . Anda harus selalu mengakui penulis asli.
Cameron Skinner
25

Iterator adalah kelas super ListIterator.

Inilah perbedaan di antara mereka:

  1. Dengan iteratorAnda hanya dapat bergerak maju, tetapi dengan ListIteratorAnda dapat memindahkan kata kunci juga saat membaca elemen.
  2. Dengan ListIteratorAnda dapat memperoleh indeks di titik mana pun saat melintasi, yang tidak mungkin dilakukan dengan iterators.
  3. Dengan iteratorAnda dapat memeriksa hanya untuk elemen berikutnya yang tersedia atau tidak, tetapi di dalam listiteratorAnda dapat memeriksa elemen sebelumnya dan berikutnya.
  4. Dengan listiteratorAnda dapat menambahkan elemen baru kapan saja, sambil melintasi. Tidak mungkin dengan iterator.
  5. Dengan listiteratorAnda dapat memodifikasi elemen saat melintasi, yang tidak mungkin dilakukan dengan iterator.

Iterator terlihat dan terasa:

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

Tampilan dan nuansa ListIterator:

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
}
pengguna1923551
sumber