A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

迭代器的并发修改异常

迭代器的并发修改异常

迭代器的并发修改异常 java.util.ConcurrentModificationException
就是在遍历的过程中,使用了集合方法(add,remove,clear)修改了集合的长度,不允许的
/*
  *  迭代器的并发修改异常 java.util.ConcurrentModificationException
  *  就是在遍历的过程中,使用了集合方法修改了集合的长度,不允许的
  */
public class ListDemo1 {
  public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("abc1");
    list.add("abc2");
    list.add("abc3");
    list.add("abc4");

    //对集合使用迭代器进行获取,获取时候判断集合中是否存在 "abc3"对象
    //如果有,添加一个元素 "ABC3"
    Iterator<String> it = list.iterator();
    while(it.hasNext()){
      String s = it.next();
      //对获取出的元素s,进行判断,是不是有"abc3"
      if(s.equals("abc3")){
        list.add("ABC3");
      }
      System.out.println(s);
    }
  }
}

运行上述代码发生了错误 java.util.ConcurrentModificationException这是什么原因呢?
   在迭代过程中,使用了集合的方法对元素进行操作。
   导致迭代器并不知道集合中的变化,容易引发数据的不确定性。

并发修改异常解决办法:
    在迭代时,不要使用集合的方法操作元素。
    或者通过ListIterator迭代器操作元素是可以的,ListIterator的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马