Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Mengalih Keluar Elemen daripada ArrayList Semasa Lelaran?

Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Mengalih Keluar Elemen daripada ArrayList Semasa Lelaran?

Barbara Streisand
Barbara Streisandasal
2024-10-28 03:18:301011semak imbas

How to Avoid ConcurrentModificationException When Removing Elements from an ArrayList During Iteration?

Cara Mengendalikan ConcurrentModificationException Apabila Mengubah Suai ArrayList Semasa Memulas

Apabila melelaran melalui ArrayList, cuba untuk mengalih keluar elemen semasa lelaran boleh menghasilkan java.util.ConcurrentModificationException . Ini berlaku disebabkan oleh mekanisme gagal pantas ArrayList, yang mengesan sebarang perubahan pada struktur senarai semasa lelaran dan membuang pengecualian untuk mengelakkan hasil yang tidak dijangka.

Untuk menyelesaikan isu ini, terdapat dua pendekatan utama yang perlu dipertimbangkan:

Pilihan 1: Buat Senarai Nilai untuk Dialih Keluar

Pendekatan ini melibatkan mengenal pasti elemen yang akan dialih keluar dalam gelung dan menambahkannya ke senarai berasingan. Setelah lelaran selesai, alih keluar semua elemen daripada senarai asal menggunakan kaedah removeAll().

<code class="java">ArrayList<A> valuesToRemove = new ArrayList<>();

for (A a : abc) {
    if (a.shouldBeRemoved()) {
        valuesToRemove.add(a);
    }
}

abc.removeAll(valuesToRemove);</code>

Pilihan 2: Gunakan Iterator Remove

Sebagai alternatif, anda boleh menggunakan iterator sendiri kaedah keluarkan(). Walau bagaimanapun, ambil perhatian bahawa pendekatan ini memerlukan penggunaan gelung untuk tradisional dan bukannya gelung untuk dipertingkatkan.

<code class="java">for (Iterator<A> iterator = abc.iterator(); iterator.hasNext();) {
    A a = iterator.next();
    if (a.shouldBeRemoved()) {
        iterator.remove();
    }
}</code>

Dengan melaksanakan salah satu pendekatan ini, anda boleh mengelakkan ConcurrentModificationException sambil mengubah suai ArrayList anda dengan berkesan semasa lelaran.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Mengalih Keluar Elemen daripada ArrayList Semasa Lelaran?. 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