import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class N {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
Iterator<String> ite =list.iterator();
while(ite.hasNext()) {
String str = ite.next();
if("2".equals(str)) { //先遍历 , 在2后边加入新元素
list.add("4"); //在迭代过程中,不要使用集合操作,不能对元素增删改查,容易出现 并发异常,,,一定是list.add,不是ite.add
}else { //可以使用Iterator 的子接口 ListIterator来完成迭代中,对元素的更多造作
System.out.println(obj);
}
}
}
}
以上代码运行,抛异常:
Exception in thread "main" 1
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at com.digui.N.main(N.java:16)
API:
java.util.ConcurrentModificationException 并发修改异常
解决方法:使用 listIterator
ListIterator ite=list.listIterator();
while(ite.hasNext()) {
Object obj = ite.next();
if(obj.equals("2")) {
ite.add("4"); //注意不是集合list,而是ite迭代器
}else { //可以实现迭代过程中,对元素的增删改查 //只有List接口具体此迭代功能
System.out.println(obj);
}
}
System.out.println(list);
}
}
// System.out.println(it.hasNext()); //false,,,,,,此时指针在尾部
// System.out.println(it.hasPrevious());//true
while(it.hasPrevious()){ //逆向遍历,,不用再声明Iterator
System.out.print(it.previous()+"\t");
}
或者:使用普通for循环
for(int i=0;i<=al.size()-1;i++){
// String str=al.get(i);
// if("js".equals(str)){
// al.add("oracle");
// }
// }