Es gibt viele Möglichkeiten, Elemente in der Liste zu durchqueren und zu löschen, und es treten Probleme auf, wenn sie nicht ordnungsgemäß verwendet werden. Werfen wir einen Blick auf die folgenden Formen der Durchlauflöschung von Elementen in der Liste:
1. Entfernen Sie mehrere Elemente, die die Kriterien durch eine Verbesserung für die Schleife erfüllen
2. Entfernen Sie ein Element, das die Kriterien durch eine Verbesserung für die Schleife erfüllt
3. Löschen Sie mehrere Elemente, die die Bedingungen durch gewöhnliche Löschung erfüllen
4. Iterator, um mehrere Elemente zu durchqueren und zu löschen, die den Bedingungen erfüllen
/ *** Verwenden Sie erweitert für Schleife* Nach dem Löschen von Elementen aus der Liste während der Schleife wird die ConcurrentModificationException gemeldet, wenn die Loop -Liste weiterhin die Liste*/ public void listreMove () {list <Student> student> this.getStudents (); für (Schüler stu: Studenten) {if (stu.getId () == 2) Studenten.Remove (stu); }} / *** Verwenden Sie eine Verbesserung für die Schleife zum Durchqueren und Löschen von Liste. Es wird jedoch keine Ausnahme angezeigt, wenn sie unmittelbar nach dem Löschen auftaucht für (Student stu: student) {if (stu.getId () == 2) {students.remove (stu); brechen; }}} /** * Diese Art von Traversal kann ein Element verpassen, da sich die Größe der Liste nach dem Löschen des Elements ändert und der Index des Elements ebenfalls ändert. Wenn Sie beispielsweise zum zweiten Element schauen, löschen Sie es, * als nächstes besuchen Sie das dritte Element und greifen tatsächlich auf das ursprüngliche vierte Element zu. Wenn der aufgerufene Element * Index die Größe der aktuellen Liste überschreitet, wird eine Ausnahme des Array grenzüberschreitenden. Natürlich wird diese Ausnahme hier nicht erscheint, *, denn jedes Mal, wenn Sie sie durchgehen, wird die Größe der aktuellen Liste erneut aufgenommen. */ public void listremove2 () {list <Student> students = this.getStudents (); für (int i = 0; i <students.size (); i ++) {if (students.get (i) .getId ()%3 == 0) {student student = student.get (i); Studenten.Remove (Student); }}} / *** Sie können auch erfolgreich löschen und durchqueren, indem Sie Iterator verwenden*/ public void iteratorremove () {list <Student> students = this.getStudents (); System.out.println (Studenten); Iterator <Student> Stuper = student.Iterator (); while (stuper.hasnext ()) {student student = stuper.next (); if (student.getId () % 2 == 0) // Hier müssen Sie die Methode des Iterators entfernen, um das aktuelle Objekt zu entfernen. Wenn Sie die Liste der Liste entfernen, erscheint die ConcurrentModificificationException auch stuiter.remove (); } System.out.println (Studenten); } Import Java.util.ArrayList; Import Java.util.iterator; Import Java.util.List; Public Class Listremove {public static void main (String args []) {listemove lr = new listremove (); lr.listremove (); lr.listremoveBreak (); // lr.listremove2 (); // lr.Inatorremove (); } / *** Verwenden Sie erweitert für Schleife* Nach dem Löschen von Elementen aus der Liste während der Schleife wird eine ConcurrentModificificationException gemeldet, wenn die Liste der Schleifenliste* / public void listremove () {list <Student> student> this.getStudents () fortgesetzt wird; für (Schüler stu: Studenten) {if (stu.getId () == 2) Studenten.Remove (stu); }} / *** Verwenden Sie eine Verbesserung für die Loop zum Durchqueren und Löschen von Liste. Nach dem Löschen wird jedoch keine Ausnahme angezeigt, wenn sie sofort auftaucht für (Student stu: student) {if (stu.getId () == 2) {students.remove (stu); brechen; }}}} /*** Diese Art von Situation verwendet keinen erweiterten für die Schleife, und die Größe der Liste der Liste wird beim Laufen nicht gemeldet, aber das Ergebnis des Löschens kann falsch sein. */ public void listremove2 () {list <Student> students = this.getStudents (); für (int i = 0; i <students.size (); i ++) {if (students.get (i) .getId ()%2 == 0) Studenten.Remove (i); }} / *** Sie können auch erfolgreich löschen und durchqueren, indem Sie Iterator* / public void iteratorremove () {list <Student> student> this.getStudents () verwenden; System.out.println (Studenten); Iterator <Student> Stuper = student.Iterator (); while (stuper.hasnext ()) {student student = stuper.next (); if (student.getId () % 2 == 0) STOITER.REMOVE (); } System.out.println (Studenten); } private list <Student> getstudents () {list <Stud Student> students = new ArrayList <Studenten> () {{int i = 0; while (i ++ <10) {Student Student = New Student (i, "201200" + i, "name_" + i); this.add (Student); }}}; Studenten zurückgeben; }} Student der öffentlichen Klasse {private int id; private String Stuno; privater Zeichenfolge Name; 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 "student [id =" + id + ", name =" + name + ", stuno =" + stuno + "]"; }}Der obige Artikel durchquert und löscht Elemente in List (empfohlen) korrekt, ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.