Rumah> Java> javaTutorial> teks badan

Bagaimana untuk menyelesaikan pengecualian iterator Java (IteratorException)

WBOY
Lepaskan: 2023-08-17 22:43:45
asal
1538 orang telah melayarinya

Bagaimana untuk menyelesaikan pengecualian iterator Java (IteratorException)

Cara menyelesaikan Java IteratorException (IteratorException)

Dalam pengaturcaraan Java, iterator (Iterator) ialah struktur data yang biasa digunakan untuk melintasi elemen dalam koleksi atau senarai. Walau bagaimanapun, jika anda menggunakan iterator secara salah, pengecualian iterator (IteratorException) mungkin dilemparkan, menyebabkan ralat program.

Artikel ini akan memperkenalkan punca biasa pengecualian iterator dan cara menggunakan iterator dengan betul untuk mengelakkan pengecualian.

Sebab 1: Pengubahsuaian serentak

Sebuah iterator direka untuk melintasi elemen dalam koleksi atau senarai Semasa proses traversal, ia perlu memperoleh kunci pada struktur data dalaman untuk memastikan ketepatan traversal. Oleh itu, apabila utas lain mengubah suai koleksi atau senarai semasa proses traversal iterator, pengecualian pengubahsuaian serentak (ConcurrentModificationException) akan berlaku.

Kod contoh:

List list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if (item.equals("a")) { list.remove(item); // 在遍历过程中删除元素 } }
Salin selepas log masuk

Penyelesaian:

Semasa proses traversal iterator, jangan gunakan kaedah pengubahsuaian set atau senarai (seperti remove) untuk mengubah suai data, tetapi gunakan kaedah alih keluar iterator.

Kod sampel yang diubah suai:

List list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if (item.equals("a")) { iterator.remove(); // 使用迭代器的remove方法来删除元素 } }
Salin selepas log masuk

Sebab dua: Status lelaran yang salah

Iterators mempunyai tiga keadaan: tersedia (hasNext), diperoleh (seterusnya) dan dipadamkan (alih keluar). Apabila menggunakan iterator dengan betul, anda perlu memanggil kaedah ini dalam susunan yang betul. Jika tidak, pengecualian iterator akan dilemparkan.

Kod contoh:

List list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { iterator.remove(); // 错误的调用了remove方法,应该在调用next后再调用remove String item = iterator.next(); System.out.println(item); }
Salin selepas log masuk

Penyelesaian:

Gunakan urutan kaedah iterator dengan betul: mula-mula panggil kaedah hasNext, kemudian panggil kaedah seterusnya, dan akhirnya panggil kaedah alih keluar.

Kod contoh yang diubah suai:

List list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); iterator.remove(); // 先调用next再调用remove System.out.println(item); }
Salin selepas log masuk

Ringkasan:

Penggunaan iterator yang betul adalah kunci untuk mengelakkan pengecualian iterator. Semasa proses traversal, jangan ubah suai koleksi atau senarai, tetapi gunakan kaedah alih keluar iterator untuk memadamkan elemen. Pada masa yang sama, ia juga sangat penting untuk memanggil kaedah iterator (hasNext, next, remove) dalam susunan yang betul.

Dengan mengikut prinsip di atas, kita boleh mengelakkan berlakunya pengecualian iterator dan menjadikan program lebih mantap dan boleh dipercayai.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan pengecualian iterator Java (IteratorException). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!