0

重複の可能性:
LinkedList に要素を追加する際の同時変更エラー

私はリンクリストの配列リストを持っています

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

実行時にボタンをクリックすると、リストからいくつかの要素を削除し、それらを他のリストに追加したいと考えています。リンクリストを次のように宣言しようとしました

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

それでもエラーは同じままです。私はエラーを理解することができません.私も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();    

代わりに 2 つのリストを管理し、反復後に結果リストの効果をソース リストに適用します。

于 2012-04-04T07:35:55.477 に答える
0

このエラーは、反復処理中にリストからオブジェクトを削除すると発生します。削除したい項目を別のリストに入れ、最初の項目を繰り返した後、 を呼び出すだけfirstlist.removeAll(list_with_items_to_remove)です。

于 2012-04-04T07:37:06.560 に答える