Antarmuka Iterator
1. Antarmuka Iterator
Iterable
Metode bawaan iterator () mengembalikan iterator yang baru dibuat.
menyukai:
antarmuka publik iterable {iterator iterator (); } Iterator memiliki dua metode: hasnext () dan next () untuk diimplementasikan. Iterator Antarmuka Publik {Boolean HasNext (); Item next (); void remain (); // Implementasi Opsional}
2. Impor Impor
impor java.util.iterator;
Kelas generik, mengimplementasikan antarmuka iterable mengimplementasikan iterable <TEMET>
Memberikan metode iterator iterable (), mengembalikan jenis iterator yang ditentukan.
Tentukan tipe iterator mengimplementasikan iterator <TEMET>
Implementasikan hasnext (), next (), dan ramping ()
3. Contoh:
Public Class Stack <Item> mengimplementasikan Iterable <TIMET> {PUBLIK ITERATOR <TEMET> iterator () {return new ListIterator <TITEM> (pertama); } Private Class ListIterator <TIMET> mengimplementasikan iterator <TEMET> {private node <TITEM> saat ini; PUBLIK PUBLIKITERator (NODE <TIMET> First) {Current = First; } public boolean hasnext () {return current! = null; } public void remove () {throw new UnsupportedOperationException (); } item publik next () {if (! hasnext ()) lempar nosuchelementException baru (); Item item = current.item; current = current.next; item pengembalian; }}} 4. Metode Panggilan
iterasi foreach
untuk (string s: stack) system.out.println (s);
Jika itu adalah tipe dasar seperti int/double, silakan gunakan hubungan konversi sebelumnya
5. Looping Traversal
Iterator i = stack.iterator (); while (i.hasnext ()) {string s = i.next (); }Antarmuka enumerasi
Pencacahan adalah kelas antarmuka di java.util. Dalam enumerasi, ia merangkum metode tentang menghitung set data. Ini mirip dengan Iterator. Ini digunakan untuk melintasi elemen dalam koleksi. Namun, enumerasi enumerasi hanya menyediakan fungsi elemen traversing dari koleksi jenis vektor dan hashtable. Jenis objek pengumpulan ini memperoleh objek enumerasi dengan memanggil metode elemen () dan kemudian memanggil metode berikut untuk melintasi elemen dalam koleksi.
HasmoreLements (): Menentukan apakah masih ada data dalam objek enumerasi
nextElement (): Dapatkan data berikutnya di objek enumerasi
Contohnya adalah sebagai berikut:
Enumeration req = request.getParameternames (); while (req.hasmoreElements ()) {objek obj = (objek) req.nextElement (); if (obj.tostring (). trim (). Equals ("LastPage")) {System.out.println ("LastPage /N"); } lain jika (obj.toString (). trim (). Equals ("nextpage")) {System.out.println ("nextPage"); }} Perbedaan antara iterator dan enumerasi
Dalam koleksi Java, kami biasanya melintasi koleksi melalui "Iterator" atau "Kelas Pencacahan". Hari ini, mari kita belajar tentang perbedaan di antara mereka bersama.
Pertama -tama mari kita lihat kode sumber enumeration.java dan iterator.java, dan kemudian bicarakan perbedaan mereka.
Pencacahan adalah antarmuka, dan kode sumbernya adalah sebagai berikut:
paket java.util; enumerasi antarmuka publik <e> {boolean hasmoreelements (); E nextElement ();} Iterator juga merupakan antarmuka, dan kode sumbernya adalah sebagai berikut:
paket java.util; antarmuka publik iterator <E> {boolean hasnext (); E next (); void remeFe ();} Setelah membaca kode, mari kita bicara tentang perbedaan di antara mereka.
(01) Antarmuka fungsi yang berbeda
Pencacahan hanya memiliki 2 antarmuka fungsi. Melalui enumerasi, kami hanya dapat membaca data pengumpulan, tetapi tidak dapat memodifikasi data.
Iterator hanya memiliki 3 antarmuka fungsi. Selain membaca data pengumpulan, Iterator juga dapat menghapus data.
(02) Iterator mendukung mekanisme gagal-cepat, tetapi enumerasi tidak.
Pencacahan adalah antarmuka yang ditambahkan oleh JDK 1.0. Fungsi yang digunakan termasuk vektor, hashtable dan kelas lainnya, yang semuanya ditambahkan dalam JDK 1.0. Tujuan enumerasi adalah untuk memberi mereka antarmuka traversal. Pencacahan itu sendiri tidak mendukung sinkronisasi, tetapi ketika vektor dan hashtable menerapkan enumerasi, sinkronisasi ditambahkan.
Iterator adalah antarmuka yang ditambahkan hanya dalam JDK 1.2. Ini juga menyediakan antarmuka traversal untuk koleksi seperti HashMap dan ArrayList. Iterator mendukung mekanisme gagal-cepat: Ketika beberapa utas beroperasi pada konten koleksi yang sama, peristiwa gagal-cepat dapat dihasilkan.