Java基础篇(四)———集合的并发修改异常

首先我们了解一下List系列集合的四种遍历方式

1.准备数据
    List<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("b");
    list.add("c");
2.迭代器遍历删除
    Iterator<String> it = list.iterator();
    while(it.hasNext()){
        String next = it.next();
        if ("b".equals(next)){
           // list.remove("b");
            it.remove();
        }
    }
需要注意的是这里我注释了List集合的remove方法,它会报一个叫做ConcurrentModificationException的异常,因为remove方法底层实际上还是利用循环索引来实现的,而当我们使用list的remove方法时,在删除的时候索引又往下移动,会导致漏删,而java为了避免这种低级错误会直接报异常,所以我们需要使用Iterator迭代器的专属remove方法来进行删除,而迭代器自己的remove方法在进行删除时相当于进行了一次递增再递减,避免了漏删的情况。
3.增强型for遍历删除
  for (String s:list
         ) {
        if("b".equals(s)){
            list.remove("b");
        }
    }
foreach方法会报同样的异常,foreach相当于是简单的for循环,主要是用于遍历的,不建议使用其进行元素的增删改。
4.lambda表达式
  list.forEach(s->{
        if ("b".equals(s)) {
        list.remove("b")
        }
    });
lamda表达式的内部也是通过foreach实现的,所以也不能进行删除
5.for循环
for循环有两种方法,一种是模仿Iiterator的remove方法在删除时索引自减,第二种就是从末尾开始遍历,由于过于简单就交给大家自己练习
posted @ 2022-05-03 20:53  Object_gl  阅读(174)  评论(0)    收藏  举报