如何克服ConcurrentModificationException错误

时间:2012-04-04 07:32:12

标签: java

  

可能重复:
  Concurrent modification error when adding elements to LinkedList

我是一个链表的arraylist

List<LinkedList<File1>> backup = new ArrayList<LinkedList<File1>>();

在运行时单击按钮我想从列表中删除少量元素并将其添加到其他列表中。 我也尝试将链表声明为

List<LinkedList<File1>> lists = Collections.synchronizedList(new ArrayList<LinkedList<File1>>());

bt仍然是错误保持不变。我无法弄清楚错误,我也是新的java所以PLZ做的帮助。 我的代码如下。

 private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // When delete button is clicked
        int parent_node = 0, d =0 ;
        File1 srt[] ;
        File1 deleted[] = new File1[no_node];
        Random randomGenerator = new Random();
        int rand_no = 0;
        while(rand_no == 0)
        {
            rand_no = randomGenerator.nextInt(no_node);
        }
        System.out.println("random no : " + rand_no);
         for(i=0;i<backup.size();i++)
         {             
             ListIterator itr = it_bk.get(i);
             while(itr.hasNext())
             {
                 File1 file = (File1) itr.next();                 
                 if(rand_no == file.nod)
                 {                     
                     parent_node = i;
                     itr.remove();                     
                 }
             }
             //iterating back
             while(itr.hasPrevious())
              {
                  File1 file = (File1) itr.previous();
              }             
         }

         System.out.println("Parent node:" + parent_node);
         //add the nodes to parent
         ListIterator itr1 = it_bk.get(rand_no);

         System.out.println("randam node");

         while(itr1.hasNext())
         {
             File1 file = (File1) itr1.next();
             deleted[d] = new File1();
             deleted[d] = file ;
             d++;
             //tmp_bk.add(file); 
             System.out.println("node :" + file.nod + "\tdist :" + file.dist);
         }

         LinkedList<File1> tmp_bk = backup.get(parent_node);
         for(j=0;j<d;j++)
         {
             tmp_bk.add(deleted[j]);
             System.out.println(deleted[j].nod + "\t" + deleted[j].dist);
         }
         //it_bk.add(tmp_bk.listIterator());
         ListIterator itr_p = it_bk.get(parent_node);
         System.out.println("parent node");
          while(itr_p.hasNext())
         {
             File1 file = (File1) itr_p.next();
             System.out.println("node :" + file.nod + "\tdist :" + file.dist);
         }

      }                

2 个答案:

答案 0 :(得分:1)

您正在浏览列表并修改无效的相同列表

itr.remove();    

改为管理两个列表,并在迭代后将结果列表的效果应用于源列表

答案 1 :(得分:0)

从列表中删除对象时会发生错误,而迭代它时。 您可以将要删除的项目放在另一个列表中,并在迭代完第一个列表后调用firstlist.removeAll(list_with_items_to_remove)