Gagal Cepat Dan Gagal Aman Iterator Di Java: Apa Bedanya?



Artikel tentang 'Iterator Aman Gagal Cepat dan Gagal' ini akan membantu Anda membandingkan kedua Iterator ini secara mendetail dengan contoh yang relevan.

mendukung dua jenis iterator, yang pertama gagal cepat dan yang kedua gagal aman. Ini memainkan peran penting dalam menangani pengecualian di Jawa. Dalam artikel tentang 'Iterator Aman Gagal dan Gagal' ini, kami akan menganalisis cara kerja kedua iterator serta perbedaan penting di antara keduanya.

Berikut adalah petunjuk yang akan dibahas dalam artikel ini:





Sebelum masuk ke penjelasan detailnya, mari kita kenali dulu konsep Concurrent Modification.

Modifikasi Bersamaan

Ketika satu utas (atau beberapa utas), mengulangi koleksi, itu dapat mengubah struktur koleksi, baik dengan menambahkan atau menghapus elemen dalam koleksi, atau dengan memperbarui nilai elemen pada posisi tertentu. Proses ini dikenal sebagai modifikasi serentak.



Mari kita lihat dengan cepat dua Sistem yang memperhatikan topik di atas, sebelum masuk ke rincian yang sama,

Gagal Sistem Cepat:

Sebuah sistem diberi label sistem cepat gagal, jika dimatikan segera setelah terjadinya kesalahan. Operasi langsung dibatalkan dan kegagalan atau kesalahan terungkap.

Gagal Sistem Aman:

Sebuah sistem diberi label sistem gagal aman, jika mereka terus beroperasi bahkan setelah terjadi kesalahan atau kesalahan. Mereka tidak membatalkan operasi dan menyembunyikan kesalahan alih-alih memperlihatkannya.



c ++ operator cakupan

Iterator di java memungkinkan kita untuk melintasi objek Collection. Iterator yang dikembalikan oleh Collection adalah gagal cepat atau gagal aman di alam.

Gagal Iterator Cepat

Gagal iterator cepat di Java melarang semua jenis modifikasi struktural ke koleksi saat mengulanginya. Modifikasi Struktural mencakup penambahan, penghapusan, atau pembaruan elemen apa pun dalam koleksi sambil mengulanginya. Iterator menampilkan ConcurrentModificationException, jika koleksi diubah secara struktural selama proses iterasi.

Namun, harus dicatat bahwa jika item dihapus menggunakan metode iterator sendiri yaitu metode remove (), tidak ada pengecualian yang dilemparkan. Ini adalah proses yang sepenuhnya aman. pastikan Anda punya java diinstal di sistem Anda

Contoh dari Fail Fast 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 Map // pengecualian akan dilemparkan pada panggilan berikutnya // metode next (). monthIndex.put ('4', 'April')}}}

Keluaran:

Pengecualian di thread 'utama' java.util.ConcurrentModificationException

di java.util.HashMap $ HashIterator.nextEntry (Sumber Tidak Dikenal)

Sekarang mari kita lanjutkan dan lihat Iterator Aman Gagal,

Gagal Iterator Aman

Tidak seperti iterator Fail Fast, iterator Fail Safe tidak memberikan pengecualian apa pun jika koleksi diubah selama proses iterasi. Hal ini disebabkan oleh fakta bahwa mereka melakukan iterasi pada tiruan koleksi, bukan pada koleksi sebenarnya. Modifikasi struktural yang dilakukan pada koleksi sebenarnya tidak diperhatikan oleh mereka.

Namun, harus diperhatikan bahwa tidak ada Iterator Aman yang benar-benar Gagal. Akan lebih tepat untuk menyebutnya sebagai Konsisten Lemah. Ini berarti itu jika Koleksi diubah selama proses iterasi, apa yang dilihat Iterator dijamin lemah. Perilaku ini berbeda untuk koleksi yang berbeda dan didokumentasikan di Javadocs.

Contoh dari Fail Safe Iterator:

public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'Maret') Iterator iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'April')}}}

Keluaran:

  • Januari
  • Februari
  • Maret

Akhirnya di artikel ini kita akan membandingkan iterator ini,

Perbedaan: Iterator Aman Gagal Cepat Dan Gagal

Diberikan di bawah ini adalah perbedaan penting antara kedua iterator:

Parameter Gagal Iterator Cepat Gagal Iterator Aman
Lempar ConcurrentModification Exception

Ya, mereka melempar CocurrentModificationExcepti-on jika koleksi diubah saat mengulanginya.

Tidak, mereka tidak membuang pengecualian apa pun jika koleksi diubah saat mengulanginya.

Gandakan Koleksi

Tidak, mereka menggunakan koleksi asli untuk melintasi elemen.

Ya, mereka menggunakan salinan dari koleksi asli untuk melintasi.

Overhead Memori

Tidak, mereka tidak membutuhkan memori ekstra.

Ya, mereka membutuhkan memori ekstra untuk mengkloning koleksi.

Contoh

HashMap, Vektor, ArrayList, HashSet

CopyOnWriteArrayList

Iterator ini unik dan sangat dibutuhkan dalam bahasa java yang serbaguna. Meskipun fail safe memiliki cincin yang nyaman untuk itu, iterator fast fail terbukti kuat.

Ini mengakhiri artikel ini. jika Anda ingin mempelajari lebih lanjut, lihat oleh Edureka. Kursus pelatihan dan sertifikasi Java J2EE dan SOA dari Edureka dirancang untuk memberi Anda permulaan dalam pemrograman Java dan melatih Anda untuk konsep inti dan lanjutan Java bersama dengan berbagai kerangka kerja Java seperti Hibernate & Spring.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar di blog 'Gagal Cepat vs Gagal Aman' dan kami akan menghubungi Anda kembali secepatnya.