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

原创 2012年03月22日 12:45:10

代码如下:

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


LinkedList,ArrayList在foreach循环遍历时可以删除元素!!!

ArrayList是java开发时非常常用的类,常碰到需要对ArrayList循环删除元素的情况。这时候大家都不会使用foreach循环的方式来遍历List,因为它会抛java.util.Concur...
  • u014096215
  • u014096215
  • 2015年03月16日 16:57
  • 2179

ArrayList、LinkedList、HashMap的遍历及遍历过程中增删元素

ArrayList、LinkedList、HashMap是Java中常用到的几种集合类型,遍历它们是时常遇到的情况。当然还有一些变态的时候,那就是在遍历的过程中动态增加或者删除其中的元素。     ...
  • can007
  • can007
  • 2014年02月21日 22:59
  • 1814

高级for循环使用remove/add 问题

今天在高级for循环中用了一下remove发现报错,写了个demo测试看: List a = new ArrayList(); a.add("1"); a.add("2"); for (Stri...
  • Melod_bc
  • Melod_bc
  • 2016年12月29日 17:38
  • 1657

foreach遍历list删除元素一定会报错?

list集合平常自以为用的非常熟了,原来只是用add()方法熟练而已,碰到remove一报错就彻底暴露了自己的短板啦。 来,给list集合删除某些元素,先上一段代码:       1)报错啦     ...
  • bimuyulaila
  • bimuyulaila
  • 2016年08月01日 18:42
  • 9249

java 为什么遍历的时候不能删除元素

阿里巴巴java开发手册的建议在看阿里巴巴java开发手册时,有一条建议是这样的。 【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式...
  • wangjun5159
  • wangjun5159
  • 2017年03月11日 13:26
  • 2235

为什么Iterator的remove方法可保证从源集合中安全地删除对象,而在迭代期间不能直接删除集合内元素

在对集合进行操作时,我们会发现,如果我们用迭代器迭代,但是在迭代器过程中如果使用集合对象去删除,添加,清空集合存储的对象时,那么就程序就会报出异常,例如如下代码: public class It...
  • yanshuanche3765
  • yanshuanche3765
  • 2017年12月27日 23:28
  • 18

Iterator对象的remove方法是迭代过程中删除元素的唯一方法

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public clas...
  • ld513508088
  • ld513508088
  • 2012年12月28日 13:26
  • 33956

java 遍历汇总,其中包括 for循环,foreach语句,Iterator迭代器等方法

这段时间老师给我讲了集合的一些类,比如Map,ArrayList等,这些集合肯定会涉及到集合遍历的几种情况,我查了一些前辈对java 遍历的总结,总感觉总结的有些不足,我自己借鉴了一部分,然后修改了一...
  • sinat_26863297
  • sinat_26863297
  • 2015年04月21日 17:41
  • 310

java 数组实现迭代方法 iterator,模仿Arraylist

在网上搜了下,发现没有关于数组实现迭代的相关文章,所以自己写了下。 主要是模仿的一个Arraylist 实现的主要的功能! 代码如下: 首先建个接口: package com.list; p...
  • u010402518
  • u010402518
  • 2013年05月29日 22:40
  • 3108

黑马程序员:Java基础——List集合共性方法,Iterator迭代和集合具体对象的特点

------- Java EE培训、java培训、期待与您交流! ----------
  • a13366325930
  • a13366325930
  • 2014年10月24日 13:47
  • 566
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java foreach循环, Iterator 迭代和remove方法之间的冲突
举报原因:
原因补充:

(最多只允许输入30个字)