迭代器和集合共同操作引发的异常

来源:互联网 发布:python subprocess 编辑:程序博客网 时间:2024/04/30 10:22

前注:本文参考传智博客毕向东老师的java教学视屏加上本菜鸟的一些总结理解,错漏之处烦请各位批评改正,望共同进步。 

一 背景简介
迭代器:Iterator
集合: List
异常: java.util.ConcurrentModificationException
二 代码展示(以下代码是毕向东老师)
//导包
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; 
public class StringDemoText {


public static void main(String[] args) {
List list = new ArrayList();//用ArrayList实现List集合
show(list);

}


public static void show(List list) {
//用add方法向集合list添加元素
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");

//得到list的迭代器
Iterator it = list.iterator();

/*
用迭代器取出元素的同时用机和进行操作
判断取出的对象是否为“abc2”如果是添加“abc8”
否则直接打印
*/
while(it.hasNext()){ 
Object obj = it.next();
if(obj.equals("abc2")){
list.add("abc8");
}
else{
System.out.println(obj);
}
}
}
 
}
三 解答
毕向东老师解答:
在迭代器过程中不要用集合操作容易出现异常。
四 思考(要避免此异常要怎么样)
毕向东老师解答:
可以迭代的过程中不用集合操作。
五 代码变形(为什么,问题给大家思考,答案在后面)


1.System.out.println(obj);
改为 System.out.println(it.next());
异常消失了。
 
2.改为System.out.println(it.next());后在去除list.add("abc4");
异常出现了。


3.以上代码的实现(想法)也可以用List的特有方法get 
就像:
public class StringDemoText {


public static void main(String[] args) {
List list = new ArrayList();
show(list);

}


public static void show(List list) {
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
 

 

for(int x = 0 ; x < list.size(); x ++){
Object obj = list.get(x);
if(obj.equals("abc2")){
(List)obj.add(1 , "abc8");//报错为什么????
}
else{
System.out.println(obj);
}
 

}
}
可是报错。。。。唉~~~~
1.答:避免了list.add("abc8");这句代码
2.答:如果改为System.out.println(it.next());但是没有去除list.add("abc4");可以取出偶数个元素。
去除后报错说找不到元素
六 end 
java_haha努力更新中。。。

0 0