黑马程序员技术交流社区
标题:
关于集合遍历异常的问题,
[打印本页]
作者:
阿萨德大圣
时间:
2014-11-25 18:47
标题:
关于集合遍历异常的问题,
在集合使用迭代器listiterator遍历时如果去操作数据就会报错
Iterator it = list.iterator();
while (it.hasNext()) {
String s = (String) it.next();
if ("hello".equals(s)) {
list.add("word");//好像是这一步引起的,是为什么呢
}
}
System.out.println("list:" + list);
作者:
superjiejie
时间:
2014-11-25 19:00
这个iterator迭代器在迭代过程中不支持 对数据的操作 可以用Listiterator 试试 好像是这样的的:lol
作者:
冥夜
时间:
2014-11-25 19:37
Iterator只有hasNext,next,remove方法而没有add。想要使用add只有其子类ListIterator才有。
所以把Iterator it=list.iterator();改成ListIterator it=list.listIterator();
作者:
hailong
时间:
2014-11-25 21:09
在迭代过程中是不可以使用集合的方法操作集合的,list集合可以用list特有迭代器ListIterator进行迭代,在迭代过程中使用ListIterator的方法实现添加、修改和删除操作
作者:
kerner
时间:
2014-11-25 21:18
本帖最后由 kerner 于 2014-11-25 23:31 编辑
你这样写是,取得集合的迭代器后,在对迭代器进行操作时,不能再的集合进行增删,因为会影响迭代器的判断,迭代器有两个索引与集合相关,分别指向当前和末尾,具体怎么影响可以看源代码。不过你可以这样写:
Iterator it = list.iterator();
while (list.iterator().hasNext) {
String s = (String) list.iterator().next();
if ("hello".equals(s)) {
list.add("word");//好像是这一步引起的,是为什么呢
}
}
System.out.println("list:" + list);
这样不会影响,但是是一直循环的,
改正:上面的方法不行,我又犯了不该犯的错误。
作者:
cbb
时间:
2014-11-25 21:27
想要增加的话要用特有的迭代器 ListIterator
作者:
迷失的小Z
时间:
2014-11-25 21:44
并发修改异常么?是因为修改了集合的长度而迭代器没有改变才出的错……
作者:
爽亮前程
时间:
2014-11-25 22:07
本帖最后由 爽亮前程 于 2014-11-25 22:15 编辑
同学你好:
你这样做会引起:ConcurrentModificationException 并发修改异常
原因为使用迭代器的过程中不可以对集合进行操作,具体原因可以查看源码:
你可以这样修改:
1:
for (int x = 0; x < list.size(); x++) {
String s = list.get(x);
if ("hello".equals(s)) {
list.add(x + 1, "word");
}
}
System.out.println("list:" + list);
复制代码
2:
ListIterator it = list.listIterator();
while (it.hasNext()) {
String s = (String) it.next();
if ("hello".equals(s)) {
it.add("word");
}
}
System.out.println("list:" + list);
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2