Pengecualian Pengubahsuaian Serentak
Apabila berurusan dengan koleksi, anda mungkin menghadapi ConcurrentModificationException, yang menunjukkan bahawa koleksi telah diubah suai semasa iterator berada dalam guna. Ini boleh menjadi ralat yang mengelirukan untuk nyahpepijat, terutamanya jika anda tidak melihat sebarang konkurensi yang jelas dalam kod anda.
Pertimbangkan contoh berikut:
import java.util.*; public class SomeClass { public static void main(String[] args) { List<String> s = new ArrayList<>(); ListIterator<String> it = s.listIterator(); for (String a : args) s.add(a); if (it.hasNext()) String item = it.next(); System.out.println(s); } }
Dalam kod ini, ConcurrentModificationException ialah dilemparkan kerana senarai s diubah suai dengan menambah elemen (menggunakan s.add()) manakala iterator ia dicipta tetapi belum lagi digunakan.
Untuk menyelesaikan isu ini, anda harus mencipta iterator selepas senarai diisi sepenuhnya. Berikut ialah versi kod yang diperbetulkan:
import java.util.*; public class SomeClass { public static void main(String[] args) { List<String> s = new ArrayList<>(); for (String a : args) s.add(a); ListIterator<String> it = s.listIterator(); if (it.hasNext()) { String item = it.next(); } System.out.println(s); } }
Pengubahsuaian ini memastikan bahawa lelaran dibuat dan digunakan selepas koleksi diubah suai sepenuhnya, mengelakkan sebarang isu konkurensi.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Mengulang Melalui Koleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!