Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Mengulang dan Mengubah Suai ArrayList?

Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Mengulang dan Mengubah Suai ArrayList?

Patricia Arquette
Patricia Arquetteasal
2024-10-30 08:21:28735semak imbas

How to Avoid a ConcurrentModificationException When Iterating and Modifying an ArrayList?

ConcurrentModificationException berlaku apabila ArrayList dilalui (diulang semula) dan diubah suai pada masa yang sama. Artikel ini meneroka amalan terbaik untuk mengendalikan pengecualian ini, menggariskan pendekatan alternatif.

Mengelakkan Pengecualian Pengubahsuaian Serentak

Untuk mengelakkan pengecualian daripada berlaku, dua pilihan tersedia:

  1. Buat Senarai Nilai untuk Dialih Keluar: Semasa mengulang, tambah nilai yang perlu dialih keluar ke senarai berasingan. Setelah lelaran selesai, panggil kaedah "removeAll" pada senarai asal.
  2. Gunakan Kaedah Alih Keluar Iterator: Daripada mengubah suai ArrayList terus dalam gelung, gunakan kaedah "buang" daripada iterator itu sendiri. Ini memerlukan penggunaan gelung untuk tradisional dan bukannya gelung untuk dipertingkatkan.

Contoh Kaedah Alih Keluar Iterator:

Pertimbangkan senario mengalih keluar rentetan dengan panjang lebih besar daripada 5 daripada ArrayList:

<code class="java">List<String> list = new ArrayList<>();
...
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
    String value = iterator.next();
    if (value.length() > 5) {
        iterator.remove();
    }
}</code>

Dalam contoh ini, kaedah "alih keluar" pengubah digunakan untuk mengubah suai senarai asal dengan selamat semasa mengulanginya.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Mengulang dan Mengubah Suai ArrayList?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn