Enumeration vs Iterator
Terdapat banyak struktur data yang bertindak sebagai koleksi dalam Java seperti Vektor, jadual Hash dan kelas yang melaksanakan Rangka Kerja Koleksi Java (iaitu HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap dan LinkedHashSet). Terdapat banyak cara untuk melelaran melalui elemen individu objek di Jawa. Java menyediakan dua antara muka untuk memudahkan tugas ini. Penghitungan dan Iterator ialah dua antara muka yang terdapat dalam pakej java.util yang menyediakan fungsi untuk menghitung melalui jujukan atau objek dengan set item. Enumerator telah diperkenalkan dalam JDK 1.0 dan Iterator yang diperkenalkan dalam JDK 1.2 hampir menduplikasi kefungsian Enumerator (dalam Rangka Kerja Koleksi).
Apakah itu Penghitungan?
Enumeration ialah antara muka awam di Java, diperkenalkan dalam JDK 1.0, yang menyediakan keupayaan untuk menghitung melalui jujukan unsur. Ia ditemui di bawah pakej java.util. Apabila antara muka Pengiraan dilaksanakan oleh objek, objek itu boleh menjana jujukan elemen. Antara muka pengiraan mempunyai dua kaedah. Kaedah hasMoreElements() akan menguji jika penghitungan ini mengandungi lebih banyak elemen dan nextElement() mengembalikan elemen seterusnya dalam jujukan (jika terdapat sekurang-kurangnya satu lagi untuk pergi). Dalam erti kata lain, dengan memanggil nextElement() berturut-turut, pengaturcara boleh mengakses elemen individu dalam siri tersebut. Contohnya, untuk mencetak semua elemen dalam Vektor v1 menggunakan Enumerator, coretan kod berikut boleh digunakan.
Enumeration e=v1.elements();
Sementara(e.mempunyaiLebihLemen()){
System.out.println(e.nextElement());
}
Enumerator juga boleh digunakan untuk menentukan aliran input ke objek SequenceInputStream.
Apakah Iterator?
Iterator ialah antara muka awam dalam pakej Java.util, yang membenarkan lelaran melalui elemen objek koleksi yang melaksanakan rangka kerja Koleksi (seperti ArrayList, LinkedList, dll.). Ini telah diperkenalkan dalam JDK 1.2 dan menggantikan Enumerator dalam Rangka Kerja Koleksi Java. Iterator mempunyai tiga kaedah. Kaedah hasNext() menguji sama ada terdapat baki elemen dalam koleksi dan kaedah next() mengembalikan elemen seterusnya dalam siri. Kaedah remove() boleh digunakan untuk mengalih keluar elemen semasa daripada koleksi asas. Contohnya, untuk mencetak semua elemen dalam Vektor v1 menggunakan Iterator, coretan kod berikut boleh digunakan.
Iterator i=v1.elements();
Sementara(i.hasNext()){
System.out.println(e.next());
}
Apakah perbezaan antara Penghitungan dan Iterator?
Walaupun, Enumeration dan Iterator ialah dua antara muka yang terdapat dalam pakej java.util, yang membenarkan lelaran/penghitungan melalui elemen siri, ia mempunyai perbezaannya. Sebenarnya, Iterator, yang diperkenalkan selepas Enumeration, menggantikan Enumeration dalam rangka kerja Java Collections. Tidak seperti Enumeration, Iterator adalah selamat gagal. Ini bermakna pengubahsuaian serentak (kepada koleksi asas) tidak dibenarkan apabila Iterator digunakan. Ini sangat berguna dalam persekitaran berbilang benang yang sentiasa ada risiko pengubahsuaian serentak. Sekiranya berlaku pengubahsuaian serentak, objek Iterator akan membuang ConcurrentModificationException. Iterator mempunyai nama kaedah yang lebih pendek berbanding Enumerator. Tambahan pula, iterator mempunyai fungsi tambahan untuk memadamkan elemen semasa lelaran (yang tidak mungkin menggunakan Enumerator). Jadi, jika terdapat keperluan untuk mengalih keluar elemen daripada koleksi, Iterator ialah satu-satunya pilihan yang boleh dipertimbangkan.