用普通for循环和迭代器的删除
package com.dele; //用迭代方法的删除
import java.util.ArrayList;
import java.util.Iterator;
public class Demon_Dele {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("r");
list.add("g");
list.add("s");
//用普通for循环迭代删除
/*for (int i = 0; i < list.size(); i++) {
if("r".equals(list.get(i)))
list.remove(i--);
}
System.out.println(list);*/
//用迭代器Iterator删除
Iterator<String> it = list.iterator();
while(it.hasNext()) {
if("r".equals(it.next())) {
//list.remove("r"); //用list的remove方法会发生并发异常
it.remove(); //所以若是调用迭代器的删除就可以
}
}System.out.println(list);
}
}
运行结果:
用增强for循环不能实现删除
package com.dele; //用迭代方法的删除
import java.util.ArrayList;
import java.util.Iterator;
public class Demon_Dele {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("r");
list.add("g");
list.add("s");
for (String string : list) {
if("r".equals(string)) {
list.remove("r"); //此处只能调用list的remove方法
}
}
}
运行结果
因为增强版的for循环底层是依赖iterator迭代器,所以若是直接调用list的方法删除就会发生并发异常,然而它又不能调用迭代器的删除方法,所以增强版for循环不能删除集合元素,只能遍历