黑马程序员技术交流社区
标题:
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