2012-08-06 83 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