0

可能重复:
将元素添加到 LinkedList 时并发修改错误

我有一个链表的数组列表

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

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

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

bt 仍然错误保持不变。我无法找出错误,我也是java新手,所以请帮忙。我的代码如下。

 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);
         }

      }                
4

2 回答 2

1

您正在遍历列表并修改无效的相同列表,

itr.remove();    

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

于 2012-04-04T07:35:55.477 回答
0

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

于 2012-04-04T07:37:06.560 回答