Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mengelakkan ConcurrentModificationException Apabila Mengulang dan Mengubah Suai Senarai Java?

Bagaimanakah Saya Boleh Mengelakkan ConcurrentModificationException Apabila Mengulang dan Mengubah Suai Senarai Java?

DDD
DDDasal
2024-11-29 13:25:11511semak imbas

How Can I Avoid ConcurrentModificationException When Iterating and Modifying a Java List?

Memahami Pengecualian Pengubahsuaian Serentak dalam Java

ConcurrentModificationException berlaku apabila berbilang benang secara serentak mengubah suai koleksi boleh ubah, selalunya melanggar ketekalan dalamannya. Untuk menggambarkan konsep ini, mari kita analisa coretan kod yang menghadapi pengecualian ini.

import java.util.*;

public class ConcurrentModificationExample {

    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);
    }
}

Kod ini cuba melelang melalui senarai sambil menambahkan elemen padanya. Walau bagaimanapun, pengecualian dilemparkan kerana ListIterator telah dibuat sebelum elemen ditambahkan.

Untuk mengelakkan ralat ini, kita boleh mengubah suai kod seperti berikut:

import java.util.*;

public class ConcurrentModificationExample {

    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);

    }
}

Dalam kod yang disemak ini, iterator senarai dibuat selepas elemen telah ditambahkan pada senarai, memastikan konsistensi. ListIterator membenarkan pengubahsuaian senarai semasa lelaran, tetapi adalah penting bahawa ia dibuat selepas senarai dimulakan dan tidak diubah suai antara penciptaan dan penggunaan. Ini memastikan senarai kekal dalam keadaan sah sepanjang lelaran.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan ConcurrentModificationException Apabila Mengulang dan Mengubah Suai Senarai Java?. 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