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


相关文章推荐

java在foreach里面删除元素分析

比较好的删除集合中元素的做法。 方法(1): public static void main(String[] args) { List list = new ArrayList(); ...

[破除迷信]java.util.ArrayList在foreach循环遍历时可以删除元素

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

Java8 新特性之集合: removeIf(Predicate<? super E> filter)

下边是JDK1.8.0_121中接口Collection的部分源码:/** * Removes all of the elements of this collection that satisf...

Java List<Object>去掉重复对象-java8

一、去除List中重复的Stringpublic List removeStringListDupli(List stringList) { Set set = new LinkedHashS...

foreach中使用remove问题

先贴代码:     List a = new ArrayList();         a.add("1");         a.add("2");         for (String ...

在foreach循环中对list结构进行添加或删除

在循环中对list进行添加或删除操作,会抛出currentModifierException,因为在循环过程中动态的加入或删除list元素会导致list的元素数量改变,出现漏项或者无限循环等现象。 ·...

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

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

java中foreach与迭代器

foreach语法主要用于数组,也可以应用于任何的Collection对象。这是Java SE5中引入的被称为Iterable接口的原因。该接口包含一个产生Iterator的iterator()方法,...

关于java for()循环 remove 的使用

case 1: public static void main(String[] args) { List ls = new ArrayList(); ls.add(1); ls.add(2)...
  • Truong
  • Truong
  • 2014年09月10日 11:07
  • 5712

ArrayList在for循环中使用remove方法移除元素

有时候我们需要在一个ArrayList的for循环中动态删除元素的需求, 废话不多说看代码 List list = new ArrayList(); list.add(0); list.add(1)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java foreach循环, Iterator 迭代和remove方法之间的冲突
举报原因:
原因补充:

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