foreach循环中删除一个列表中的元素报错

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013234928/article/details/50510722
ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
for(String s:list){
    if(s.equals("a")){
        list.remove(s);
    }
}



它会抛出一个ConcurrentModificationException异常。

相反下面的显示正常:

<span style="color:#330000;">ArrayList<String> list = new ArrayList<String>(Arrays.asList("a","b","c","d"));
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
        String s = iter.next();
        if(s.equals("a")){
            iter.remove();
    }
}</span>
因为.next()必须在.remove()之前调用。
在一个foreach循环中,编译器会使.next()在删除元素之后被调用,因此就会抛出ConcurrentModificationException异常,
深入研究可以看一下ArrayList.iterator()的源代码。

猜你喜欢

转载自blog.csdn.net/u013234928/article/details/50510722