Rumah > Java > javaTutorial > Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Menambah pada ArrayList Semasa Lelaran dalam Android?

Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Menambah pada ArrayList Semasa Lelaran dalam Android?

Barbara Streisand
Lepaskan: 2024-12-03 07:52:09
asal
289 orang telah melayarinya

How to Avoid ConcurrentModificationException When Adding to an ArrayList During Iteration in Android?

ConcurrentModificationException semasa menambah pada ArrayList dalam Android

ConcurrentModificationException biasanya ditemui semasa membuat pengubahsuaian pada senarai yang diulang. Pengecualian ini boleh timbul dalam pelbagai senario, salah satunya ialah apabila mengubah ArrayList menggunakan Iterator.

Dalam coretan kod yang disediakan, isu ini nyata semasa acara OnTouchEvent apabila menambahkan Elemen baharu pada mElements ArrayList:

 for (Iterator<Element> it = mElements.iterator(); it.hasNext();){
    Element element = it.next();

    // ...

    if(element.cFlag){
        mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
        element.cFlag = false;
    }
}
Salin selepas log masuk

ConcurrentModificationException dibuang kerana senarai sedang diubah suai (dengan menambahkan elemen) semasa ia diulang menggunakan Iterator.

Untuk menangani isu ini, adalah disyorkan untuk menggunakan Senarai berasingan untuk menyimpan elemen yang perlu ditambah semasa lelaran:

List<Element> thingsToBeAdded = new ArrayList<Element>();
for (Iterator<Element> it = mElements.iterator(); it.hasNext();) {
    Element element = it.next();

    // ...

    if (element.cFlag) {
        // Instead of adding elements directly to mElements, add them to thingsToBeAdded
        thingsToBeAdded.add(new Element("crack", getResources(), (int) touchX, (int) touchY));
        element.cFlag = false;
    }
}
mElements.addAll(thingsToBeAdded);
Salin selepas log masuk

Dengan menggunakan pendekatan ini, pengubahsuaian kepada senarai asal boleh ditangguhkan sehingga selepas mengulangi elemen, dengan itu mengelakkan ConcurrentModificationException.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan ConcurrentModificationException Apabila Menambah pada ArrayList Semasa Lelaran dalam Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan