Mengulang dan Mengalih Keluar Elemen daripada Peta: Menyelesaikan Pengecualian Pengubahsuaian Serentak
Meletup pada peta dan mengalih keluar elemennya boleh membawa kepada ConcurrentModificationException . Pengecualian ini berlaku apabila Koleksi Java diubah suai semasa lelaran, mewujudkan keadaan tidak segerak antara iterator dan koleksi asas.
Untuk mengelakkan pengecualian ini, satu pendekatan biasa ialah mencipta salinan set kekunci sebelum mengulanginya. Dalam kod anda, baris berikut mencapai ini:
for (Object key : new ArrayList<Object>(map.keySet()))
Pendekatan ini berkesan, tetapi mungkin terdapat penyelesaian yang lebih cekap.
Menggunakan Iterator untuk Mengalih Keluar Entri
Rangka Kerja Koleksi Java menyediakan lelaran yang membenarkan pengalihan keluar elemen dengan selamat semasa lelaran. Contoh kod berikut menunjukkan cara menggunakan iterator untuk mengalih keluar masukan dengan kunci "ujian" daripada peta:
Map<String, String> map = new HashMap<String, String>() { { put("test", "test123"); put("test2", "test456"); } }; for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); ) { Map.Entry<String, String> entry = it.next(); if(entry.getKey().equals("test")) { it.remove(); } }
Penyelesaian ini menggunakan kaedah remove() iterator, yang mengalih keluar masukan semasa dengan selamat daripada peta itu. Pendekatan ini mengelakkan keperluan untuk mencipta salinan berasingan set kunci dan secara amnya lebih cekap, terutamanya untuk peta besar.
Atas ialah kandungan terperinci Bagaimana untuk Mengalih Keluar Elemen dengan Selamat dari Peta Semasa Lelaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!