Rumah >Java >javaTutorial >Mengapakah Berbahaya untuk Menggunakan `remove()` dalam Gelung foreach Java Apabila Mengulang Koleksi?
Lelaran dan Penyingkiran dalam Koleksi Java: Bahaya remove() dalam Gelung foreach
Java menyediakan binaan gelung foreach yang mudah untuk berulang koleksi. Walau bagaimanapun, berhati-hati mesti diambil apabila cuba mengalih keluar elemen daripada koleksi semasa mengulang menggunakan gelung ini.
Penyingkiran Undang-undang Dalam Gelung foreach
Semasa mengulang dengan gelung foreach, koleksi yang diulang tidak boleh diubah suai dalam apa jua cara kecuali melalui lelaran gelung. Memanggil remove() pada koleksi secara langsung akan menghasilkan pengecualian yang tidak dijangka.
Menggunakan Iterator untuk Penyingkiran Selamat
Untuk mengalih keluar elemen yang selamat semasa lelaran, adalah penting untuk gunakan Iterator. Kaedah remove()nya direka untuk mengendalikan pengalihan keluar daripada koleksi asas tanpa menyebabkan gelagat yang tidak dijangka.
Kod Java Voici:
List<String> names = ... Iterator<String> i = names.iterator(); while (i.hasNext()) { String s = i.next(); // Must be called before i.remove() // Do something i.remove(); }
Pengecualian Pengubahsuaian Serentak
Seperti yang dinyatakan dalam dokumentasi Java, "dalam menghadapi pengubahsuaian serentak, iterator gagal dengan cepat dan bersih" dengan membuang ConcurrentModificationException. Pengecualian ini memastikan bahawa lelaran mengenal pasti dan melaporkan isu semasa lelaran yang bermasalah, dan bukannya menyebabkan tingkah laku yang tidak dapat diramalkan kemudian.
Lelaran Tersembunyi dalam foreach
Adalah penting untuk ambil perhatian bahawa gelung foreach secara tersirat mencipta iterator yang kekal tidak boleh diakses oleh pengaturcara. Disebabkan oleh lelaran tersembunyi ini, pengubahsuaian terus pada koleksi menggunakan remove() semasa lelaran dengan foreach boleh membawa kepada pengecualian yang tidak dijangka.
Atas ialah kandungan terperinci Mengapakah Berbahaya untuk Menggunakan `remove()` dalam Gelung foreach Java Apabila Mengulang Koleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!