Sehen Sie sich zunächst den folgenden Code an:
import java.util.LinkedList; import java.util.List; public class DeleteCollection { public static void main(String[] args) { List<String> list = new LinkedList<String>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); for(int i=0;i<list.size();i++){ //循环删除集合中的元素 list.remove(i); } System.out.println("还剩余的元素个数:"+list.size()); } }
Der obige Code sollte gemäß der Idee korrekt sein und das Ausgabeergebnis sollte ebenfalls 0 sein
Schauen Sie sich das tatsächliche Ausgabeergebnis unten an:
Anzahl der verbleibenden Elemente: 2
Sie fragen sich vielleicht, warum? Da sich die Größe der Sammlung dynamisch ändert, werden beim Löschen eines Elements die Seriennummern in den Elementen neu angeordnet. Das zweite Element, das gelöscht werden sollte, wird jetzt an der Position des ersten Elements angezeigt, das dritte Element wird jedoch tatsächlich gelöscht. Elemente usw., das erste, dritte, fünfte, ... get(i)); kann überprüft werden.
Das Ausgabeergebnis nach dem Hinzufügen der obigen Anweisung:
Zu löschendes Element: a
Zu löschendes Element: c
Zu löschendes Element: e
Verbleibende Zahl Anzahl der Elemente: 2
Lösung:
Der Grund dafür ist, dass das Element, das Sie löschen möchten, nach vorne verschoben wurde und der von Ihrem i gespeicherte Wert immer noch nach hinten verschoben wird Wenn ich nicht zurückgehe, sondern einen Schritt vorwärts gehe, kann das Element gelöscht werden, das ursprünglich an zweiter Stelle stand und jetzt an erster Stelle steht.
Geänderter Kerncode:
for(int i=0;i<list.size();i++){ System.out.println("即将删除的元素:"+list.get(i)); list.remove(i); i--; }
Ergebnis:
Zu löschendes Element: a
Zu löschendes Element: b
Zu löschendes Element: c
Zu löschendes Element: d
Zu löschendes Element: e
Anzahl der verbleibenden Elemente: 0
Das Obige ist der Zweck dieses Artikels. Das ist alles . Ich hoffe, es gefällt euch allen.
Weitere Artikel zum Thema For-Loop-Deletion-Collection-Traps in Java finden Sie auf der chinesischen PHP-Website!