Apa perbedaan persis antara kedua antarmuka ini? Apakah Enumeration
memiliki manfaat dibandingkan penggunaan Iterator
? Jika ada yang bisa menjelaskan, artikel referensi akan sangat dihargai.
java
collections
iterator
enumeration
cometta
sumber
sumber
Jawaban:
Melihat Spesifikasi Java API untuk
Iterator
antarmuka, terdapat penjelasan tentang perbedaan antaraEnumeration
:Intinya adalah, keduanya
Enumeration
danIterator
akan memberikan elemen yang berurutan, tetapiIterator
ditingkatkan sedemikian rupa sehingga nama metode lebih pendek, dan memilikiremove
metode tambahan . Berikut ini perbandingan berdampingan:Seperti yang juga disebutkan dalam Spesifikasi API Java, untuk program yang lebih baru,
Iterator
sebaiknya lebih disukai daripadaEnumeration
, karena "Iterator menggantikan Enumerasi dalam kerangka koleksi Java." (DariIterator
spesifikasinya.)sumber
Iterator cepat gagal . yaitu ketika satu utas mengubah koleksi dengan operasi tambah / hapus, sementara utas lain melewatinya melalui Iterator menggunakan
hasNext() or next()
metode, iterator gagal dengan cepat dengan melemparConcurrentModificationException
. Perilaku cepat gagal dari iterator hanya dapat digunakan untuk mendeteksi bug. Pencacahan dikembalikan dengan metode kelas seperti Hashtable, Vektor tidak gagal-cepat yang dicapai dengan menyinkronkan blok kode di dalamnextElement()
metode yang mengunci objek Vektor saat ini yang menghabiskan banyak waktu.sumber
"Secara resmi", mereka seharusnya serupa dengan antarmuka iterator yang mendukung operasi tambahan (misalnya, penghapusan). Umumnya, kecenderungannya adalah menggunakan iterator.
Berikut ini dari antarmuka pencacahan javadocs :
sumber
Satu fakta sederhana tetapi belum disebutkan dalam jawaban sebelumnya adalah yang
Iterator<T>
digunakan denganIterable<T>
to melayani dalam menafsirkanfor(_type_ element:collection){...}
struktur.sumber
Ada tiga perbedaan mendasar dalam Pencacahan dan Iterator
Pencacahan
1. digunakan hanya untuk kelas lagacy (mis.
Vector
)2. Operasi baca dapat dilakukan, kita tidak dapat menghapus elemen.
3. Dua Metode tersedia
Iterator
itu berlaku untuk semua Koleksi
Operasi Baca dan Hapus dapat dilakukan
Tiga Metode tersedia
Batasan di keduanya
Add object
danReplace object
sumber
Jika Anda menulis class collection Anda sendiri, dan Anda memperluas class yang ada atau menerapkan salah satu antarmuka framework Collections, pada dasarnya Anda tidak punya pilihan selain menggunakan Iterator.
Jika karena alasan tertentu (yang saya tidak bisa pikirkan) Anda membuat kelas koleksi khusus yang tidak berhubungan dengan java.util.Collection atau java.util.Map dengan cara apa pun, Anda tetap harus mengimplementasikan Iterable sehingga orang dapat menggunakan kelas Anda untuk loop.
sumber
Perbedaan utamanya adalah Pencacahan tidak mengekspos metode remove (). Selain itu, Iterator tidak mengizinkan navigasi dan modifikasi secara bersamaan pada objek yang mendasarinya. Mereka memiliki kontrol untuk melihat apakah ada modifikasi bersamaan atau lebih, dan karenanya membutuhkan lebih banyak pemrosesan. Jadi, kinerja Pencacahan hampir 50% lebih cepat daripada Iterator. Jika kita hanya membutuhkan navigasi dengan mengabaikan sinkronisasi seperti itu, gunakan saja Pencacahan.
sumber
1) Perbedaan utama antara Iterator dan Enumerasi adalah penghapusan elemen saat melintasi koleksi. Iterator bisa menghapus elemen selama traversal pengumpulan karena memiliki metode remove (). Pencacahan tidak memiliki metode remove ().
2) Pencacahan bersifat gagal-aman. Itu tidak memunculkan ConcurrentModificationException jika Collection diubah selama traversal. Iterator bersifat cepat gagal. Itu melontarkan ConcurrentModificationException jika Collection diubah saat melakukan iterasi selain metode remove () miliknya sendiri.
3) Enumerasi adalah antarmuka lawas yang digunakan untuk melintasi Vektor, Hashtable. Iterator bukan antarmuka lama. Iterator dapat digunakan untuk traversal dari HashMap, LinkedList, ArrayList, HashSet, TreeMap, TreeSet.
sumber
Enumerasi hanya dapat digunakan untuk kelas lama (Vektor, Stack ...), sedangkan Iterator dapat digunakan untuk semua.
sumber
Baik iterator dan enumerasi digunakan untuk mengambil data, perbedaannya adalah enumerasi hanya dapat digunakan untuk kelas legacy yaitu vektor / stack sedangkan iterator dapat digunakan untuk sisanya. Pencacahan juga dapat digunakan untuk set kunci di peta.
sumber