リストには、このようなトラップそれに遭遇したコレクション内の要素を削除しますか?

  三つの方法を削除するリスト:

 (1)通常のトラバーサル:

1  @Test
 2      公共 ボイドtestlistという(){
 3          のArrayList <ストリング>リスト= 新規のArrayList <> ();
4          list.add( "1" )。
5          list.add( "2" )。
6          list.add( "3" )。
7          // 1 普通元素中遍历删除リスト
8          のためのint型 i = 0; iが(はlist.sizeを<); iが++ ){
 9              であれば(list.get(I).equals( "1" )){
 10                  list.remove(I) ;
11              }
 12             System.out.println(List.get(I));
 13がある         }
 14          // 結果:ノーマルトラバーサル:正常に削除
15      }

  (2)拡張forループ:

1  @Test
 2      公共 ボイドtestlistという(){
 3          のArrayList <ストリング>リスト= 新規のArrayList <> ();
4          list.add( "1" )。
5          list.add( "2" )。
6          list.add( "3" )。
7          // 2 增强元素中删除リスト循环ための
8          (文字列str:リスト)のために{
 9              IF(str.equals( "1")){
 10                  list.remove( "1")。
11              }
 12              のSystem.out.println(STR)。
 
         結果:スロー- > ConcurrentModificationExceptionが
15      }

  (3)反復処理:

1  @Test
 2      公共 ボイドtestlistという(){
 3          のArrayList <ストリング>リスト= 新規のArrayList <> ();
4          list.add( "1" )。
5          list.add( "2" )。
6          list.add( "3" )。
7          // 3.迭代器遍历删除リスト元素中
8          listIter =イテレータの<string> list.iterator();
9          一方(listIter.hasNext()){
 10              列次= listIter.next()。
11              であれば( "1" .equals(次)){
 12                 listIter.remove();
 13である             }
 14              のSystem.out.println(NEXT);
 15          }
 16          // 結果:正常を超える反復が削除
17          }
 18      }

要約:

  (1)通常のトラバーサル:コードでは、要素、インデックスマイナス1への必要性を削除した後。各要素を除去した後、ArrayListの要素は、後の位置(つまり、コピーである)を上に移動するので、インデックスまたは現在のインデックスにアクセスするには、次の必要になりますので、これは、それがすべてマイナス1を入れて持っている必要があります横断要素は、<循環は、特定の要素を削除するため、適していない特定の要素を削除サイクリングに適し>

  (2)拡張forループ:ConcurrentModificationExceptionがスローされた、削除することはできません。< オブジェクトの変更が発生することはできませんリストのセットを、使用中に、それは例外がスローされます >。

  (3)を反復:通常は削除します。  

  イテレータは、通常の理由を削除することができます。

    反復子は、要素を削除すると、(次を使用することである)(要素を取得し、その後、削除)要素を除去するが、もし間に次の()と(削除)、制度変更のセットは、(削除、追加)が発生IllegalStateExceptionがスローされ()次読み取るので、反復子の位置は、既に現在の要素の位置に、位置がもはや指している次を指します。

例外が発生した構造変化のコレクション(増加または削除)があったIllegalStateExceptionが。

  

おすすめ

転載: www.cnblogs.com/l3306/p/11491872.html