黑马程序员技术交流社区
标题:
并发修改异常
[打印本页]
作者:
LsEmpire
时间:
2017-2-25 16:20
标题:
并发修改异常
List list = new ArrayList();
list.add("a");
list.add("a");
list.add("world");
list.add("a");
ListIterator lit = list.listIterator();
while(lit.hasNext()) {
String str = (String)lit.next();
if("world".equals(str)) {
lit.add("javaee");
}
}
System.out.println(list);
这段代码,是增加不会出现并发修改异常
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
ListIterator<String> lit = list.listIterator();
ListIterator<String> lit1 = list.listIterator();
while(lit.hasNext()) {
String s = lit.next();
boolean b = true;
while(lit1.hasNext()) {
String s1 = lit1.next();
if(b && s.equals(s1)){
b = false;
continue;
}
if(s.equals(s1) && !b) {
lit1.remove();
}
}
}
System.out.println(list);
这段我想删除重复,用的也是ListIterator为何会报错,并发修改异常!
谢谢指导!~~
作者:
LsEmpire
时间:
2017-2-25 16:27
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
for (String str : list) {
ListIterator<String> lit = list.listIterator();
boolean first = true;
while(lit.hasNext()) {
if(first && str.equals(lit.next())) {
first = false;
continue;
}
if(str.equals(lit.next()) && !first) {
lit.remove();
}
}
System.out.println(list);
这样也是并发修改异常。
求解为何异常?
作者:
flying81621
时间:
2017-2-25 22:59
先顶一下!!!!!!!!
作者:
flying81621
时间:
2017-2-25 23:13
没找出原因,还是再顶一下把
作者:
yeluoxingye
时间:
2017-2-25 23:18
迭代器嵌套吗?内部迭代器操作完后,会改变集合,但是外部的迭代器还在遍历。所以会有并发修改异常
作者:
yeluoxingye
时间:
2017-2-25 23:21
2楼增强for循环底层是用迭代器实现的,所以跟一楼类似,出现并发修改异常
作者:
Port
时间:
2017-2-26 02:31
并发修改异常……
作者:
LsEmpire
时间:
2017-2-26 22:06
yeluoxingye 发表于 2017-2-25 23:18
迭代器嵌套吗?内部迭代器操作完后,会改变集合,但是外部的迭代器还在遍历。所以会有并发修改异常
...
就是说,内层的迭代器每次都在创建,会知道有没有变化。但是while外面的就创建一次,不知道里面的变化?但是第一段代码,也是在while外面创建的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2