Saya baru di Jawa dan saya benar-benar bingung dengan iterator dan iterable. Adakah yang bisa menjelaskan kepada saya dan memberikan beberapa contoh?
195
An Iterable
adalah representasi sederhana dari serangkaian elemen yang dapat diulangi. Itu tidak memiliki keadaan iterasi seperti "elemen saat ini". Sebaliknya, ia memiliki satu metode yang menghasilkan Iterator
.
An Iterator
adalah objek dengan status iterasi. Ini memungkinkan Anda memeriksa apakah ada lebih banyak elemen yang digunakan hasNext()
dan pindah ke elemen berikutnya (jika ada) menggunakan next()
.
Biasanya, suatu Iterable
harus dapat menghasilkan sejumlah Iterator
s yang valid .
Iterable
memilikiinteral
atauexternal
mengulangi atau mungkin untuk memilikinya?Implementasi
Iterable
adalah yang menyediakanIterator
sendiri:Iterator adalah cara sederhana yang memungkinkan beberapa orang untuk mengulang koleksi data tanpa hak penugasan (meskipun dengan kemampuan untuk menghapus).
Lihat Javadoc .
sumber
Saya akan menjawab pertanyaan terutama tentang ArrayList sebagai contoh untuk membantu Anda memahami lebih baik ..
. Dan Iterable, Collection and List hanya mendeklarasikan metode abstrak 'iterator ()' dan ArrayList sendiri yang mengimplementasikannya.
Metode 'iterator ()' mengembalikan objek kelas 'Itr' yang mengimplementasikan 'Iterator'.
Sekarang, apakah sudah jelas? :)
sumber
Iterable<T>
dalam skenario ini langkah-langkah apa yang perlu kita terapkan? Tolong sarankan contoh itu juga.Jika koleksi iterable, maka dapat iterasi menggunakan iterator (dan akibatnya dapat digunakan dalam untuk setiap loop.) Iterator adalah objek aktual yang akan beralih melalui koleksi.
sumber
java.lang.Iterable
?java.lang.Iterable
Menerapkan antarmuka Iterable memungkinkan objek untuk menjadi target pernyataan "foreach".
Iterator adalah antarmuka, yang memiliki implementasi untuk beralih pada elemen. Iterable adalah antarmuka yang menyediakan Iterator.
sumber
Pertimbangan yang paling penting adalah apakah barang yang dimaksud harus dapat dilintasi lebih dari satu kali. Ini karena Anda selalu dapat memundurkan Iterable dengan memanggil iterator () lagi, tetapi tidak ada cara untuk memundurkan Iterator.
sumber
Seperti yang dijelaskan di sini , " Iterable " diperkenalkan untuk dapat digunakan dalam
foreach
loop. Kelas yang mengimplementasikan antarmuka Iterable dapat diulangi.Iterator adalah kelas yang mengelola iterasi di atas Iterable . Itu mempertahankan keadaan di mana kita berada dalam iterasi saat ini, dan tahu apa elemen berikutnya dan bagaimana mendapatkannya.
sumber
Pertimbangkan contoh memiliki 10 buah apel. Ketika mengimplementasikan Iterable, itu seperti menempatkan setiap apel dalam kotak dari 1 hingga 10 dan mengembalikan iterator yang dapat digunakan untuk bernavigasi.
Dengan menerapkan iterator, kita bisa mendapatkan apel, apel di kotak selanjutnya dll.
Jadi menerapkan iterable memberikan iterator untuk menavigasi elemen-elemennya meskipun untuk menavigasi, iterator perlu diimplementasikan.
sumber
Pertanyaan: Perbedaan antara Iterable dan Iterator?
Jawab:
iterable: Hal ini terkait dengan
iterator forEach loop : Apakah terkait dengan Koleksi
Elemen target dari forEach loop harus digandakan iterable.
Kita dapat menggunakan Iterator untuk mendapatkan objek satu per satu dari Koleksi
Iterable hadir dalam paket java.ḷang
Iterator hadir dalam paket java.util
Hanya mengandung satu metode iterator ()
Berisi tiga metode hasNext (), next (), hapus ()
Diperkenalkan dalam versi 1.5
Diperkenalkan dalam versi 1.2
sumber
Pada dasarnya, keduanya terkait erat satu sama lain.
Pertimbangkan Iterator sebagai antarmuka yang membantu kita dalam menelusuri koleksi dengan bantuan beberapa metode yang tidak ditentukan seperti hasNext (), next () dan hapus ()
Di sisi lain, Iterable adalah antarmuka lain, yang, jika diimplementasikan oleh suatu kelas memaksa kelas untuk menjadi Iterable dan merupakan target untuk setiap konstruksi. Ini hanya memiliki satu metode bernama iterator () yang berasal dari antarmuka Iterator itu sendiri.
Ketika koleksi iterable, maka dapat diulang menggunakan iterator.
Untuk memahami, kunjungi ini:
ITERABLE: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java
ITERATOR http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java
sumber
Saya tahu ini adalah pertanyaan lama, tetapi bagi siapa pun yang membaca ini yang terjebak dengan pertanyaan yang sama dan yang mungkin kewalahan dengan semua terminologi, inilah analogi sederhana dan bagus untuk membantu Anda memahami perbedaan antara iterables dan iterators:
Pikirkan perpustakaan umum. Sekolah tua Dengan buku kertas. Ya, perpustakaan seperti itu.
Rak yang penuh dengan buku akan seperti sebuah iterable. Anda bisa melihat antrean panjang buku di rak. Anda mungkin tidak tahu berapa banyak, tetapi Anda dapat melihat bahwa itu adalah koleksi buku yang panjang.
Pustakawan akan seperti iterator. Dia dapat menunjuk ke buku tertentu kapan saja. Dia dapat memasukkan / menghapus / memodifikasi / membaca buku di lokasi yang ditunjuknya. Dia menunjuk, secara berurutan, ke setiap buku sekaligus setiap kali Anda berteriak "selanjutnya!" untuk dia. Jadi, Anda biasanya akan bertanya kepadanya: "memiliki Berikutnya?", Dan dia akan berkata "ya", yang Anda katakan "selanjutnya!" dan dia akan menunjuk ke buku berikutnya. Dia juga tahu kapan dia mencapai ujung rak, sehingga ketika Anda bertanya: "Apakah Berikutnya?" dia akan mengatakan "tidak".
Saya tahu ini agak konyol, tapi saya harap ini bisa membantu.
sumber
Selain jawaban ColinD dan Seeker .
Dalam istilah sederhana, Iterable dan Iterator keduanya adalah antarmuka yang disediakan dalam Java's Framework Framework.
Iterable
Sebuah kelas harus mengimplementasikan antarmuka Iterable jika ingin memiliki untuk-setiap loop untuk beralih ke koleksi. Namun, untuk-setiap loop hanya dapat digunakan untuk menggilir koleksi di arah maju dan Anda tidak akan dapat memodifikasi elemen dalam koleksi ini . Tetapi, jika semua yang Anda inginkan adalah membaca elemen data, maka itu sangat sederhana dan berkat ekspresi lambda Java sering liner. Sebagai contoh:
Iterator
Antarmuka ini memungkinkan Anda untuk beralih ke koleksi, mendapatkan dan menghapus elemen-elemennya. Setiap kelas koleksi menyediakan metode iterator () yang mengembalikan iterator ke awal koleksi. Keuntungan dari antarmuka ini lebih dari itu adalah bahwa dengan antarmuka ini Anda dapat menambah, memodifikasi atau menghapus elemen dalam koleksi . Tetapi, mengakses elemen membutuhkan kode yang lebih banyak daripada yang dapat dilakukan. Sebagai contoh:
Sumber:
sumber
Iterable
diperkenalkan untuk digunakan dalam untuk setiap loop di javaIterator
adalah kelas yang mengatur iterasi lebih dari satuIterable
. Itu mempertahankan keadaan di mana kita berada dalam iterasi saat ini, dan tahu apa elemen berikutnya dan bagaimana mendapatkannya.sumber