关闭

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

标签: iteratorjavastringlist
6829人阅读 评论(5) 收藏 举报

代码如下:

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


0
2

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62723次
    • 积分:1045
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:17篇
    • 译文:0篇
    • 评论:14条
    最新评论