list集合中的remove(Object o)方法
- 在使用迭代器遍历时不能使用 集合对象的remove()方法,会发生读写异常,应该使用迭代器中的remove()方法(//ConcurrentModificationException(并发修改异常))
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
if ("b".equals(iterator.next())) {
//list.remove("b"); //ConcurrentModificationException(并发修改异常) 不能用集合list中的remove()方法
iterator.remove(); //可以用Iterator的remove()方法
}
-
增强版的foreach方法 只适合遍历输出元素,不适合删除元素会发生(读写并发异常)
-
CopyOnWriteArrayList可以解决并发修改的异常
CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList<>();
* 可以解决并发修改异常的问题
* for (String s : copyOnWriteArrayList) {
if ("c".equals(s)) {
copyOnWriteArrayList.remove("c");
}
}
- foreach循环里,在遍历集合时是通过迭代器Iterator进行迭代的,但是元素的remove/add方法使用的是集合自己的方法,会发生并发修改的异常。(如果删除的元素是该集合中的倒数第二个元素,不会发生异常,通过查看源码是这样解析的)