ArrayList的ConcurrentModificationException

package list;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo2 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
list.add("world");
list.add("java");
list.add("world");
list.add("world");
list.add("world");
list.add("world");
list.add("java");
list.add("world");
Iterator it = list.iterator();
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i).equals(list.get(j))) {
list.remove(j);
j--;
}
}
}
while (it.hasNext()) {
System.out.println((String)it.next());
}
}
}
运行时报错:Exception in thread "main" java.util.ConcurrentModificationException,请问怎么解决/

1个回答

你把 Iterator it = list.iterator(); 这行移到for() 循环下面就可以了

放上面得到的是就list 的 Iterator

rke_poke
rke_poke 回复yanmengdewo: 知道了,谢谢!
2 年多之前 回复
yanmengdewo
yanmengdewo 回复rke_poke: 放上面得到的是旧list 的 Iterator 执行for()循环后。list 中的内容发生了变化,用老的 Iterator去遍历是会出错的
2 年多之前 回复
rke_poke
rke_poke 谢谢,这样 确实解决问题了,可以具体解释一下原理吗?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!