黑马程序员技术交流社区

标题: Iterator问题,,,,, [打印本页]

作者: 马个了黑_邓    时间: 2014-11-11 10:44
标题: Iterator问题,,,,,
import java.util.ArrayList;
import java.util.Iterator;
/*
* 一个ArrayList 对象aList 中存有若干个字符串元素,现欲遍历该ArrayList对象,删除所有字符串为"abc"
* 的字符串元素,请用代码实现
*/
public class Alist {
        public static void main(String[] args) {
                ArrayList<String> aList = new ArrayList<String>();
                aList.add("abcd");
                aList.add("abc");
                aList.add("gbcd");
                //aList.add("abec");
                //aList.add("abrc");
                //aList.add("abgc");
               
                System.out.println(aList);
        for(Iterator<String> it = aList.iterator();it.hasNext();)
                {
                        String s = it.next();
                                if(s.equals("abc"))       
                                        aList.remove(s);
                        System.out.println(s);
                }
        System.out.println(aList);
        }
}

如题,楼主刚才做了下,以前听毕老师讲的时候Iterator遍历的时候只有删除方法,楼主按照上面代码,ArrayList有3个元素的时候可以删除“abc”。而且没有异常  ,如果添加更多的元素就会有异常,求大神帮忙看看


作者: huoxy    时间: 2014-11-11 11:11
移除元素的语句改为:it.remove();   必须是都通过迭代器对列表的元素进行操作!否则会抛ConcurrentModificationException!  至于为什么3个元素时会成功,我也没弄明白,请大神帮忙看一下!
作者: 马个了黑_邓    时间: 2014-11-11 11:26
huoxy 发表于 2014-11-11 11:11
移除元素的语句改为:it.remove();   必须是都通过迭代器对列表的元素进行操作!否则会抛ConcurrentModific ...

额额额,,,,我坑了  3Q...
作者: cs8630323    时间: 2014-11-11 16:37
三个元素时第三次循环迭代器在abcd, gbcd右边,hasNext方法返回false,不执行for
四个元素时第三次循环迭代器在abcd, gbcd, abec的gbcd, abec之间,hasNext方法返回true,执行for,执行next方法,因为集合被修改,迭代器快速失败(用迭代器的remove方法不会导致快速失败),抛出异常
作者: zhangyangLengen    时间: 2014-11-11 19:28
用iteraror进行迭代的时候,不能够进行对集合中的数据进行增删;
如果想要进行增删的话:用ListIterator进行迭代




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2