本帖最后由 ID1003 于 2014-5-19 21:08 编辑
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class ListTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
ListIterator it = list.listIterator();
while (it.hasNext()) {
String s=(String)it.next();
if (list.contains("hello")) {
it.add("aaa");
}
}
/*while (it.hasNext()) {
String s=(String)it.next();
if (list.contains("hello")) {
list.add("aaa");
}
}*/
//注释这里就是发生并发修改异常的代码
System.out.println(list);
System.out.println("----------");
for (int i = 0; i < list.size(); i++) {
String s=(String)list.get(i);
if (s.equals("hello")) {
list.add("bbb");
}
System.out.print(s+" ");
}
}
}
老师说上面两种方法都可以解决并发修改异常的问题,但是我测试了一下之后运行结果是
[hello, aaa, world, aaa, java, aaa]
----------
hello aaa world aaa java aaa bbb
可以看得出来第一种方法是把每个字符串后面都增加了一个aaa字符串,而第二种只是在末尾处增加了一个,想不明白为什么。 |