プロジェクト開発中、ArrayList 内の一部の要素を動的に削除する必要が生じることがよくあります。
間違った方法:
<pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } }
上記のメソッドは次の例外をスローします:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 at java.util.ArrayList.RangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at ListDemo.main(ListDemo.java:20)
要素は削除しましたが、反復の添え字は変更していないため、反復が最後の反復に達すると例外が発生します。投げられる。
上記のプログラムは次のように改善できます:
for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); --len;//减少一个 } }
上記のコードは正しいです。
以下に別の解決策を紹介しましょう:
List インターフェイスは内部的に Iterator インターフェイスを実装し、開発者に現在のリスト オブジェクトのイテレータ オブジェクトを取得する iterator() を提供します。
Iterator<String> sListIterator = list.iterator(); while(sListIterator.hasNext()){ String e = sListIterator.next(); if(e.equals("3")){ sListIterator.remove(); } }
上記も正しいので、2 番目のオプションをお勧めします。
2 つのソリューションの実装原理はまったく異なります。2 つ目は jdk によってカプセル化されているだけです。
ArrayList のソース コードを見ると、多くのメソッドがイテレータ インターフェイスに基づいて内部実装されていることがわかります。そのため、2 番目のソリューションを使用することをお勧めします。
上記は、エディターによって提供された Java コレクション クラスの arraylist ループの特定の要素を削除するメソッド全体です。PHP の中国語 Web サイトをサポートしていただければ幸いです~
Java コレクション クラスの特定の要素を削除するその他の関連メソッドarraylist ループ PHP 中国語 Web サイトの記事にご注目ください。