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.         } 
  • 相关阅读:
    [leetcode-136-Single Number]
    [leetcode-2-Add Two Numbers]
    [leetcode-150-Evaluate Reverse Polish Notation]
    [leetcode-1-Two Sum]
    DataTable数据分页
    ToList和ToDataTable(其中也有反射的知识)
    c#解决Nullable类型的转换 (包含DataContract的序列化和反序列化以及 该例子应用在反射属性setvalue的时候有用)
    ADO.NET DataTable的复制(clone)
    OracleBulkCopy
    LIst和table的转换
  • 原文地址:https://www.cnblogs.com/deepbreath/p/4447416.html
Copyright © 2011-2022 走看看