三种迭代方式能否删除
1. 普通for循环,可以删除,但是索引要 - -(减减)。
2. 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常。
3. 增强for循环不能删除。
package com.heima.jdk5;
import java.util.ArrayList;
public class Demo03_Foreach {
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");
//1.普通for循环删除
/*for (int i = 0; i < list.size(); i++) {
if ("b".equals(list.get(i))) {
list.remove(i--); //通过索引删除元素
}
}*/
//2.迭代器
/*Iterator<String> it = list.iterator();
while (it.hasNext()) {
if ("b".equals(it.next())) {
// list.remove("b"); //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
it.remove();
}
}*/
/*for (Iterator<String> it2 = list.iterator(); it2.hasNext(); ) {
if ("b".equals(it2.next())) {
it2.remove();
}
}*/
//3.增强for循环,底层的原理是迭代器
//增强for循环不能删除,只能遍历
for (String string : list) {
if("b".equals(string)) {
list.remove("b"); //不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
}
}
System.out.println(list);
}
}
普通for循环删除原理(无自减)