menyokong dua jenis iterator, yang pertama gagal dengan cepat dan yang kedua adalah selamat. Ini memainkan peranan penting dalam menangani pengecualian di Java. Dalam artikel ini mengenai 'Fail Cepat dan Gagal Selamat Pengulangan', kami akan menganalisis cara kerja kedua iterator serta perbezaan penting antara keduanya.
Berikut adalah petunjuk yang akan dibincangkan dalam artikel ini:
- Pengubahsuaian Serentak
- Gagal Cepat Iterator
- Gagal Selamat Iterator
- Fail Cepat vs gagal Selamat Iterator
Sebelum mendapatkan penjelasan terperinci, mari kita membiasakan diri dengan konsep Pengubahsuaian Serentak.
Pengubahsuaian Serentak
Apabila satu utas (atau beberapa utas) berulang pada koleksi, ia dapat mengubah struktur koleksi, baik dengan menambahkan atau menghapus elemen dalam koleksi, atau dengan mengemas kini nilai elemen pada posisi tertentu. Proses ini dikenali sebagai pengubahsuaian serentak.
Mari kita cepat melihat dua Sistem yang berkaitan dengan topik di atas, sebelum mengetahui butiran yang sama,
Gagal Sysetm Cepat:
Sistem dilabel sistem fast fast, jika dimatikan segera setelah berlakunya kesalahan. Operasi dibatalkan serta-merta dan kegagalan atau kesilapan terdedah.
Sistem Selamat Gagal:
Sistem dilabel sistem safe safe, jika mereka terus beroperasi walaupun setelah kesalahan atau kesalahan telah terjadi. Mereka tidak membatalkan operasi dan menyembunyikan kesalahan daripada memaparkannya.
Iterator di java membolehkan kita melintasi objek Koleksi. Pengulangan yang dikembalikan oleh Koleksi sama ada gagal cepat atau gagal dalam keadaan selamat.
Gagal Cepat Iterator
Iterator yang gagal cepat di Java tidak membenarkan apa-apa jenis modifikasi struktur pada koleksi semasa melakukan iterasi. Pengubahsuaian Struktural merangkumi penambahan, penghapusan atau pengemaskinian elemen apa pun dalam koleksi semasa mengulanginya. Iterator membuang ConcurrentModificationException, jika koleksi diubah secara struktural semasa proses lelaran.
Walau bagaimanapun, harus diperhatikan bahawa jika item dikeluarkan menggunakan kaedah iterator sendiri iaitu kaedah remove (), tidak ada pengecualian yang dilemparkan. Ini adalah proses yang selamat sepenuhnya. pastikan anda ada java dipasang pada sistem anda
Contoh Fail Cepat Iterator:
import java.util.HashMap import java.util.Iterator import java.util.Map public class FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iterator iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // menambahkan elemen ke Peta // pengecualian akan dilemparkan pada panggilan seterusnya // kaedah seterusnya (). monthIndex.put ('4', 'April')}}}
Pengeluaran:
Pengecualian dalam utas 'utama' java.util.ConcurrentModificationException
di java.util.HashMap $ HashIterator.nextEntry (Sumber Tidak Dikenal)
Sekarang mari kita teruskan dan melihat Fail Safe Iterator,
Gagal Selamat Iterator
Tidak seperti iterator Fail Fast, iterator Fail Safe tidak membuang pengecualian jika koleksi diubah semasa proses lelaran. Ini disebabkan oleh fakta bahawa mereka mengulangi klon koleksi, dan bukannya koleksi yang sebenarnya. Pengubahsuaian struktur yang dilakukan pada koleksi sebenar tidak disedari oleh mereka.
Namun, harus diperhatikan bahawa tidak ada yang benar-benar Fail Safe Iterator. Adalah wajar untuk menyebutnya sebagai Konsisten Lemah. Ini bermaksud sekiranya Koleksi diubah semasa proses lelaran, apa yang dilihat oleh Iterator dijamin lemah. Tingkah laku ini berbeza untuk koleksi yang berbeza dan didokumentasikan di Javadocs.
Contoh Iterator Fail Selamat:
kelas awam FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'March') Iterator iterator = monthIndex.keySet (). Iterator () manakala (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'April')}}}
Pengeluaran:
- Januari
- Februari
- Mac
Akhirnya dalam artikel ini kita akan membandingkan iterator ini,
Perbezaan: Gagal Cepat dan Gagal Selamat Iterator
Diberikan di bawah adalah perbezaan penting antara dua iterator:
Parameter | Gagal Cepat Iterator | Gagal Selamat Iterator |
Lontarkan Pengecualian Pengubah Bersamaan | Ya, mereka membuang CocurrentModificationExcepti-on jika koleksi diubahsuai semasa berulang. | Tidak, mereka tidak membuang pengecualian jika koleksi diubah semasa mengulanginya. |
Klon Koleksi | Tidak, mereka menggunakan koleksi asli untuk melintasi elemen. | Ya, mereka menggunakan salinan koleksi asal untuk melintasi. |
Overhead Memori | Tidak, mereka tidak memerlukan memori tambahan. | Ya, mereka memerlukan memori tambahan untuk mengklon koleksi. apa idea di java |
Contoh | HashMap, Vector, ArrayList, HashSet | CopyOnWriteArrayList |
Iterator ini unik dan sangat diperlukan dalam bahasa serbaguna java. Walaupun gagal selamat mempunyai cincin yang selesa, iterator cepat yang cepat terbukti kuat.
Ini mengakhiri artikel ini. sekiranya anda ingin mengetahui lebih lanjut, periksa oleh Edureka. Kursus latihan dan pensijilan Java J2EE dan SOA Edureka direka untuk memberi anda permulaan dalam pengaturcaraan Java dan melatih anda untuk konsep Java teras dan maju bersama dengan pelbagai kerangka kerja Java seperti Hibernate & Spring.
Ada soalan untuk kami? Sila sebutkan di bahagian komen blog 'Fail Fast vs Fail Safe' ini dan kami akan menghubungi anda secepat mungkin.