A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马个了黑_邓 中级黑马   /  2014-11-11 10:44  /  1408 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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”。而且没有异常  ,如果添加更多的元素就会有异常,求大神帮忙看看

4 个回复

正序浏览
用iteraror进行迭代的时候,不能够进行对集合中的数据进行增删;
如果想要进行增删的话:用ListIterator进行迭代
回复 使用道具 举报
三个元素时第三次循环迭代器在abcd, gbcd右边,hasNext方法返回false,不执行for
四个元素时第三次循环迭代器在abcd, gbcd, abec的gbcd, abec之间,hasNext方法返回true,执行for,执行next方法,因为集合被修改,迭代器快速失败(用迭代器的remove方法不会导致快速失败),抛出异常
回复 使用道具 举报
huoxy 发表于 2014-11-11 11:11
移除元素的语句改为:it.remove();   必须是都通过迭代器对列表的元素进行操作!否则会抛ConcurrentModific ...

额额额,,,,我坑了  3Q...
回复 使用道具 举报
移除元素的语句改为:it.remove();   必须是都通过迭代器对列表的元素进行操作!否则会抛ConcurrentModificationException!  至于为什么3个元素时会成功,我也没弄明白,请大神帮忙看一下!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马