Dalam pengembangan proyek, kita mungkin sering perlu secara dinamis menghapus beberapa elemen di daftar array.
Cara yang salah:
<pre name = "code"> untuk (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); }}Metode di atas akan melempar pengecualian berikut:
Pengecualian di Thread "Main" java.lang.indexoutofboundsException: indeks: 3, ukuran: 3 di java.util.arraylist.rangecheck (sumber yang tidak diketahui) di java.util.arraylist.get (sumber yang tidak diketahui) di listdemo.main (listdemo.java:20)
Karena Anda menghapus elemen, tetapi tidak mengubah subskrip iterasi, sehingga ketika iterasi mencapai yang terakhir, pengecualian akan dilemparkan.
Program di atas dapat ditingkatkan sebagai berikut:
untuk (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); ---len; // kurangi satu}}Kode di atas benar.
Mari kita perkenalkan solusi lain:
Antarmuka daftar mengimplementasikan antarmuka iterator secara internal, memberikan pengembang dengan iterator () untuk mendapatkan objek iterator dari objek daftar saat ini.
Iterator <string> slistiterator = list.iterator (); while (slistiterator.hasnext ()) {string e = slistiterator.next (); if (e.equals ("3")) {slistiterator.remove (); }}Di atas juga benar, dan solusi kedua direkomendasikan.
Prinsip -prinsip implementasi dari kedua solusi hampir sama, dan yang kedua hanya dienkapsulasi oleh JDK.
Saat melihat kode sumber ArrayList, Anda akan menemukan bahwa banyak metode yang diimplementasikan secara internal berdasarkan antarmuka iterator, sehingga solusi kedua direkomendasikan.
Di atas adalah seluruh konten metode untuk menghapus elemen tertentu dalam loop daftar array java yang dibawa kepada Anda. Saya harap semua orang mendukung wulin.com ~