三种迭代能否删除
package com.day15.For;
import java.util.ArrayList;
import java.util.Iterator;
/*普通for循环,可以删除,但是索引要--
迭代器,可以删除,但是必须使用迭代器自身的remove方法,而不是集合的remove方法,否则会出现并发修改异常
增强for循环不能删除,因为增强for循环底层依赖的是迭代器,但是调用删除方法时,必须使用list.remove(),则相当于调用的是集合的删除方法,引起并发修改异常
public class ThreeDelete {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
//普通for循环删除,索引要--
/* for(int i=0;i<list.size();i++) {
if("b".equals(list.get(i))) {
list.remove(i--);
}
}
System.out.println(list);//[a, c, d]
*/
/*
Iterator<String> it =list.iterator();
while(it.hasNext()) {
if("b".equals(it.next())) {
//list.remove("b");//不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
it.remove();
}
}
System.out.println(list);//[a, c, d]
*/
/* for(Iterator<String> it1=list.iterator();it1.hasNext();) {
if("b".equals(it1.next())) {
it1.remove();
}
}
System.out.println(list);//[a, c, d]
*/
for(String str:list) {
if("b".equals(str)) {
list.remove("b");//并发修改异常,因为增强for循环底层依赖的是迭代器
}
}
}
}