zoukankan      html  css  js  c++  java
  • java foreach循环抛出异常java.util.ConcurrentModificationException

    代码如下:

    1. for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) {  
    2.       
    3.     if (Integer.parseInt(iter.next()) % 3 == 0 ) {  
    4.           
    5.         list.remove(iter.next());  
    6.     }  
    7.       
    8.     System.out.println(list.size() + "");  
    9. }  


    这样,使用Iterator进行迭代的时候,如果同时移除其中的元素,会抛出 java.util.ConcurrentModificationException异常。我猜想是因为我使用Iterator进行迭代的同时,移除了 其中的对象,破坏了Iterator内部用来迭代的索引。所以抛出异常。


    当然,使用foreach的语法,进行循环,本身就是使用了Iterator进行迭代。所以也会出现同样的问题。

    代码如下:

    1. for ( String iter: list ) {  
    2.       
    3.     if (Integer.parseInt(iter) % 3 == 0 ) {  
    4.           
    5.         list.remove(iter);  
    6.     }  
    7.       
    8.     System.out.println(list.size() + "");  
    9. }  


    抛出的异常也是一样的。


    如果使用普通的for循环,自己设定索引i 进行循环,就不会出现此问题

    代码如下:

      1.     for (int i = 0; i < list.size(); i ++ ) {  
      2.               
      3.             String s = list.get(i);  
      4.               
      5.             System.out.println(list.size() + "");  
      6.               
      7.             if ( Integer.parseInt(s) % 3 == 0 ) {  
      8.                   
      9.                 list.remove(s);  
      10.             }  
      11.               
      12.               
      13.         } 
  • 相关阅读:
    实验一
    MVVM Light Toolkit 学习
    配置mongodb分片群集(sharding cluster)
    【silverlight】web发布方法
    MongoDb数据库设计
    【解决方案】添加web服务失败:下载“http://localhost:2540/Service.asmx”时出错。无法生成***类型
    Codeforces #380 div2 C(729C) Road to Cinema
    Codeforces #380 div2 B(729B) Spotlights
    数据挖掘项目总结
    南方电网用电时间序列分析
  • 原文地址:https://www.cnblogs.com/deepbreath/p/4447416.html
Copyright © 2011-2022 走看看