2012-08-06 79 views
-2

可能重复收到错误:
Regarding concurrent modification Exception关于检索列表

我得到这个并发修改异常错误在下面的代码,我想删除的元素,而迭代..the代码如下..

List list=new ArrayList(); 
      list.add(new Emp("Saral","Trainer",34500)); 
      list.add(new Emp("Saral","Trainer",36000)); 
      list.add(new Emp("Saral","Trainer",33000)); 
      list.add(new Emp("Sachin","Programmer",24000)); 

,我检索方式是..

System.out.println("Content of list are : "); 
      ListIterator itr1=list.listIterator(); 
      while(itr1.hasNext()) 
      { 
       list.add(new Emp("Anand","Manager",56000)); // 
      Emp e=(Emp)itr1.next(); 
      e.display(); 
      } 

您能否告诉我们如何避免这个错误?

回答

1

您试图修改而迭代这可能导致ConcurrentModificationExceptioň

list.add(new Emp("Anand","Manager",56000)); // 
+0

@ thinksteep..yeah我知道,问题是,如何能我避免 – user1579492 2012-08-06 14:15:03

+0

@ user1579492:您可以同时通过它迭代(要添加到列表中,这是修改它)没有修改列表避免 – 2012-08-06 14:17:19

+0

您可能需要使用类似的CopyOnWriteArrayList http://docs.oracle。 COM/JavaSE的/ 6 /文档/ API/JAVA/util的/并行/ CopyOnWriteArrayList.html。 – kosa 2012-08-06 14:17:45

5

这是不可能修改List并使用了之前的List修改创建Iterator列表从中List获得,否则ConcurrentModificationException将被抛出。为避免,请勿在while内拨打list.add()

由于违规while的目的是打印列表的内容,没有理由使用一个Iterator

List<Emp> list = new ArrayList<Emp>(); 

for (Emp e: list) 
{ 
    e.display(); 
} 
+0

即使有可能,在迭代时添加到列表中也会导致无限循环。 – 2012-08-06 14:16:17