Gagal Cepat dan Gagal Selamat Iterator Di Jawa: Apakah Perbezaannya?



Artikel ini mengenai 'Fail Cepat dan Gagal Selamat Iterator' akan membantu anda membandingkan kedua Iterator ini secara terperinci dengan contoh yang relevan.

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:





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.