package com.itheima.six;
import java.util.ArrayList;
import java.util.Iterator;
/*
并发修改异常
解决方案:
使用迭代器遍历集合元素时,不能通过集合对象本身调用集合的方法,修改集合的长度
(1)使用Collection接口迭代器的方法修改长度: remove
(2)使用List接口特有迭代器ListIterator中的方法修改长度: remove,add
面试题一:
1.并发修改异常的原理是什么?
2.为什么使用迭代器遍历Collection集合时,使用集合对象的remove方法删除倒数第二个元素,不报并发修改异常?
*/
public class Demo04IteratorException {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
//删除元素BBB
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String str = it.next();
//判断当前元素如果是"BBB",就执行删除
if ("BBB".equals(str)) {
/*
使用迭代器遍历的过程中,又使用集合对象调用集合本身的方法,
修改了集合的长度(不修改长度没有任何问题)
报出并发修改异常
*/
//list.remove(str);
/*
调用迭代器对象的remove方法,
不会报出并发修改异常
*/
it.remove();
}
}
System.out.println(list);
}
}