Java foreach循环, Iterator 迭代和remove方法之间的冲突

来源:互联网 发布:sql语句中的时间格式 编辑:程序博客网 时间:2024/05/16 11:15

代码如下:

for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) {if (Integer.parseInt(iter.next()) % 3 == 0 ) {list.remove(iter.next());}System.out.println(list.size() + "");}


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


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

代码如下:

for ( String iter: list ) {if (Integer.parseInt(iter) % 3 == 0 ) {list.remove(iter);}System.out.println(list.size() + "");}

抛出的异常也是一样的。


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

代码如下:

for (int i = 0; i < list.size(); i ++ ) {                        String s = list.get(i);                        System.out.println(list.size() + "");                        if ( Integer.parseInt(s) % 3 == 0 ) {                                list.remove(s);            }                                }