リスト内の要素を横断して削除するには多くの方法があり、不適切に使用すると問題が発生します。リスト内の要素の横断的削除の次の形式を見てみましょう。
1.拡張されたループを介して基準を満たす複数の要素を削除します
2。拡張されたループを介して基準を満たす要素を削除します
3.削除のために通常の条件を満たす複数の要素を削除する
4.条件を満たす複数の要素を横断および削除するイテレータ
/ ***ループ中にリストから要素を削除した後、ループに拡張されます* concurrentModificationExceptionは、ループリストを継続するときに報告されます*/ public void listremove(){list <sudtent> sustent = this.getStudents(); for(学生STU:学生){if(stu.getid()== 2)sustent.remove(stu); }} / ***ループの拡張機能を使用してリストをトラバースして削除しますが、削除の直後にポップアップする場合は例外が表示されません*/ public void listremovebreak(){list <sudtent> sustent = this.getSudents(); for(学生stu:学生){if(stu.getid()== 2){sustent.remove(stu);壊す; }}} /** *この種のトラバーサルは、要素を削除した後、リストのサイズが *で変化し、要素のインデックスも変化しているため、要素を見逃す可能性があります。たとえば、2番目の要素にループすると、削除します。次に、3番目の要素にアクセスし、実際に元の4番目の要素にアクセスします。アクセスされた要素 *インデックスが現在のリストのサイズを超えると、配列のクロスボーダーの例外が表示されます。もちろん、この例外はここには表示されません。 *これを通過するたびに、現在のリストのサイズが再び取得されるためです。 */ public void listremove2(){list <susted> desustor = this.getStudents(); for(int i = 0; i <sustent.size(); i ++){if(sustent.get(i).getid()%3 == 0){desudent sustent = sustent.get(i); sustent.Remove(学生); }}} / *** Iteratorを使用して、削除およびトラバースを正常に削除およびトラバースすることもできます*/ public void iteratorremove(){list <sudtent> sustent = this.getSudents(); System.out.println(学生); Iterator <Student> Stuiter = sustent.iterator(); while(stuiter.hasnext()){desute desute = stuiter.next(); if(sustent.getId()%2 == 0)//ここでは、繰り返しの削除方法を使用して現在のオブジェクトを削除する必要があります。リストの削除方法を使用すると、concurrentModificationExceptionもstuiter.remove()が表示されます。 } system.out.println(学生); } import java.util.arraylist; Import java.util.iterator; import java.util.list; public class listremove {public static void main(string args []){listremove lr = new listremove(); lr.listremove(); lr.listremovebreak(); // lr.listremove2(); // lr.iteratorremove(); } / ***ループ中にリストから要素を削除した後、ループに拡張された拡張されます。ループリストを継続し続けると、同時void listRemove(){list <sudtent> sustent = this.getStudents(); for(学生STU:学生){if(stu.getid()== 2)sustent.remove(stu); }} / ***ループの拡張機能を使用してリストをトラバースして削除しますが、すぐにポップアップした場合、削除後に例外は表示されません* / public void listremovebreak(){list <sudtent> sustent = this.getSudents(); for(学生stu:学生){if(stu.getid()== 2){sustent.remove(stu);壊す; }}}}} /***この種の状況は、ループに対して強化されたものを使用せず、実行中のサイズのトラバーサルは報告されませんが、削除の結果は間違っている可能性があります。 */ public void listremove2(){list <susted> desustor = this.getStudents(); for(int i = 0; i <sustent.size(); i ++){if(sustent.get(i).getid()%2 == 0)dustent.remove(i); }} / *** iteratorを使用して削除してトラバースすることもできます* / public void iteratorremove(){list <sudtent> sustent = this.getStudents(); System.out.println(学生); Iterator <Student> Stuiter = sustent.iterator(); while(stuiter.hasnext()){desute desute = stuiter.next(); if(sustent.getid()%2 == 0)stuiter.remove(); } system.out.println(学生); } private list <Student> getStudents(){list <Student> sustent = new ArrayList <Student>(){{int i = 0; while(i ++ <10){学生学生= new Student(i、 "201200" + i、 "name_" + i); this.add(学生); }}};学生を返します。 }}パブリッククラスの学生{private int id;プライベートストリングスノ;プライベート文字列名; public Student(){} public Student(int id、string stuno、string name){this.id = id; this.stuno = stuno; this.name = name; } public int getId(){return id; } public void setid(int id){this.id = id; } public string getstuno(){return stuno; } public void setstuno(String Stuno){this.stuno = stuno; } public string getname(){return name; } public void setName(string name){this.name = name; } @Override public String toString(){return "sudent [id =" + id + "、name =" + name + "、stuno =" + stuno + "]"; }}上記の記事は、リスト内の要素を正しく通過および削除します(推奨)は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。