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

代码如下:

		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);
            }
            
            
        }


阅读更多
上一篇The Google File System (四)
下一篇观察者模式独自实现
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭