在使用迭代器进行遍历集合时,向集合中添加元素,会出现并发修改异常;
出现的原因:用集合调用迭代器在遍历集合之前,迭代器已经知道了集合的长度,在遍历过程中向集合中添加元素,就会打乱迭代器的遍历过程,就会出现并发修改异常;
如下:
List list = new ArrayList();
list.add("java");
list.add("hello");
list.add("php");
list.add("world");
list.add("Linux");
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()) {
Object obj = listIterator.next();
String str = (String) obj;
if (str.equals("world")) {
list.add("javaEE");
}
}
System.out.println(list);
异常如下:
出现上面的问题有两个解决方法:
- 使用for循环;
如下:
for (int i = 0; i < list.size(); i++) {
Object obj = list.get(i);
String str = (String) obj;
if (str.equals("world")) {
list.add("javaEE");
}
}
System.out.println(list);
- 使用迭代器自带添加或者删除的方法;
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()) {
Object obj = listIterator.next();
String str = (String) obj;
if (str.equals("world")) ;
listIterator.add("javaEE");
}
}