Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada HashMap semasa Mengulang?

Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada HashMap semasa Mengulang?

DDD
DDDasal
2024-11-17 08:11:03815semak imbas

How to Safely Remove Elements from a HashMap while Iterating?

Pengecualian Pengubahsuaian Serentak semasa Mengulang dan Mengalih Keluar

Apabila mengulangi HashMap sambil membuat pengubahsuaian serentak (seperti mengalih keluar elemen), ConcurrentModificationException mungkin berlaku. Ini kerana rujukan dalaman peulang kepada peta tidak sah oleh pengubahsuaian.

Penyelesaian Awal dengan ArrayList

Satu pendekatan biasa untuk mengelakkan pengecualian ini ialah mencipta salinan set kunci peta menggunakan ArrayList baharu<>(map.keySet()). Walau bagaimanapun, pendekatan ini mencipta salinan kunci yang tidak diperlukan, yang boleh menjadi tidak cekap.

Menggunakan Iterator untuk Penyingkiran

Penyelesaian yang lebih cekap ialah mengulangi entri peta menggunakan iterator, yang membolehkan kami mengalih keluar elemen dengan selamat. Kaedah entrySet() peta mengembalikan set entrinya, yang masing-masing mempunyai kaedah getKey() dan getValue().

Kod Contoh:

Map<String, String> map = new HashMap<>();
map.put("test", "test123");
map.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();
    }
}

Dalam contoh ini, kami mengulangi entri peta dan mengalih keluar kekunci "ujian" dengan selamat. Iterator mengendalikan pengubahsuaian yang diperlukan pada struktur dalaman peta, menghalang ConcurrentModificationException.

Atas ialah kandungan terperinci Bagaimana untuk Mengalih Keluar Elemen dengan Selamat daripada HashMap 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