Rumah >Java >javaTutorial >Mengapakah Berbahaya untuk Menggunakan `remove()` dalam Gelung foreach Java Apabila Mengulang Koleksi?

Mengapakah Berbahaya untuk Menggunakan `remove()` dalam Gelung foreach Java Apabila Mengulang Koleksi?

Susan Sarandon
Susan Sarandonasal
2024-12-18 04:16:11128semak imbas

Why is it Dangerous to Use `remove()` in Java's foreach Loop When Iterating Collections?

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!

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