Rumah >Java >javaTutorial >Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada Koleksi Java Semasa Mengulang?

Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada Koleksi Java Semasa Mengulang?

DDD
DDDasal
2024-12-21 01:02:13198semak imbas

How to Safely Remove Elements from a Java Collection While Iterating?

Mengalih Keluar Elemen dengan Selamat semasa Lelaran dalam Java

S: Adakah dibenarkan untuk mengalih keluar elemen daripada koleksi sambil mengulanginya menggunakan gelung foreach di Jawa?

J: Menggunakan gelung foreach untuk dialih keluar bukan dinasihatkan. Ia boleh mengakibatkan tingkah laku yang tidak dijangka kerana lelaran asas tidak terdedah dan boleh diakses secara langsung untuk pengubahsuaian.

Contoh:

List<String> names = ....
for (String name : names) {
   // Do something
   names.remove(name).
}

Kod ini mungkin gagal dengan java.util .ConcurrentModificationException kerana operasi alih keluar mengubah suai koleksi di bawah semasa gelung foreach berada dalam kemajuan.

S: Bolehkah kami mengalih keluar item yang belum diulang lagi?

J: Tidak. Mengalih keluar elemen yang belum diproses dalam gelung boleh membawa kepada ralat "indeks di luar sempadan". Contoh:

//Assume that the names list as duplicate entries
List<String> names = ....
for (String name : names) {
    // Do something
    while (names.remove(name));
}

Untuk mengalih keluar elemen dengan selamat semasa melelaran, Iterator harus digunakan:

List<String> names = ....
Iterator<String> i = names.iterator();
while (i.hasNext()) {
   String s = i.next(); // must be called before you can call i.remove()
   // Do something
   i.remove();
}

Dokumentasi Java menekankan bahawa iterator yang dikembalikan oleh iterator dan kaedah listIterator adalah "gagal- cepat." Sebarang pengubahsuaian struktur pada senarai di luar kaedah alih keluar atau tambah iterator akan menghasilkan ConcurrentModificationException.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Elemen dengan Selamat daripada Koleksi Java Semasa Mengulang?. 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