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!