同時変更異常にConcurrentModificationException

1.説明:コレクションをイテレータオブジェクトを使用する場合、コレクション内の要素を変更するために使用されるオブジェクトのコレクションは、例外が発生

 

パブリック 静的 ボイドメイン(文字列[]引数){ 
        
        リスト <整数>リスト= 新規のArrayList <> (); 
        list.add( 1); list.add(2); list.add(3); list.add(4 )。
        
        反復子 <整数>イテレータ= list.iterator()。
        一方、(iterator.hasNext()){ 
            整数整数 = (整数)iterator.next(); 
            list.remove( 2 )。
        } 
    }

2.原因:Anはイテレータがセットに依存しており、変更コレクションの反復子は知りません。

3.ソリューション:

   一つの方法:イテレータトラバーサルイテレータ(修正反復子

削除:

パブリック 静的 ボイドメイン(文字列[]引数){ 
        リスト <整数>リスト= 新規のArrayList <> (); 
        list.add( 1); list.add(2); list.add(3); list.add(4 )。
        
        反復子反復子= <整数> list.listIterator(); 
一方、(iterator.hasNext()){ 整数整数 = (整数)iterator.next(); もし(整数== 2 ){ iterator.remove()。 } } のSystem.out.println(リスト)。 }

 

 

 

追加:

パブリック 静的 ボイドメイン(文字列[]引数){      
        リスト <整数>リスト= 新規のArrayList <> (); 
        list.add( 1); list.add(2); list.add(3); list.add(4 )。
        
        反復子反復子= <整数> list.listIterator(); 
一方、(iterator.hasNext()){ 整数整数 = (整数)iterator.next(); もし(整数== 1 ){ iterator.add( 1 )。 } } のSystem.out.println(リスト)。 }


   第二の方法:ダイレクト・コレクションをループのための使用、修正(サイズ()およびGET())

パブリック 静的 ボイドメイン(文字列[]引数){ 
        
        リスト <整数>リスト= 新規のArrayList <> (); 
        list.add( 1); list.add(2); list.add(3); list.add(4 )。
        
        以下のためにINT ; I <はlist.size(); iが0 = I ++ ){ 
            list.set( 0,3)。// 3234 
            
            であれば(list.get(I)== 2 ){ 
                list.remove(I)。// 334 
            }
             であれば(list.get(I)== 3 ){ 
                list.add( 5)。// 33455 
            }
 
        }
        System.out.println(リスト); 
    }

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/crazy-lc/p/11900697.html