プロジェクト開発では、ArrayListの一部の要素を動的に削除する必要がある場合があります。
間違った方法:
<pre name = "code"> for(int i = 0、len = list.size(); i <len; ++ i){if(list.get(i)== xxx){list.remove(i); }}上記の方法では、次の例外がスローされます。
スレッドの例外 "main" java.lang.indexoutofboundsexception:index:3、size:3 at java.util.arraylist.rangecheck(未知のソース)at java.util.arraylist.get(listdemo.java:20)のjava.util.arraylist.get(未知のソース)
要素を削除したが、反復添え付けを変更しなかったため、イテレーションが最後のものに到達すると、例外がスローされます。
上記のプログラムは次のように改善できます。
for(int i = 0、len = list.size(); i <len; ++ i){if(list.get(i)== xxx){list.remove(i); -len; // 1つを減らす}}上記のコードは正しいです。
別のソリューションを紹介しましょう。
リストインターフェイスは、Iteratorインターフェイスを内部的に実装し、開発者にイテレーター()を提供して、現在のリストオブジェクトのイテレーターオブジェクトを取得します。
iterator <string> slistiterator = list.iterator(); while(slistiterator.hasnext()){string e = slistiterator.next(); if(e.equals( "3")){slistiterator.remove(); }}上記も正しく、2番目のソリューションが推奨されます。
2つのソリューションの実装原則はほぼ同じであり、2番目のソリューションはJDKによってカプセル化されているだけです。
ArrayListソースコードを表示する場合、Iteratorインターフェイスに基づいて多くのメソッドが内部的に実装されているため、2番目のソリューションが推奨されます。
上記は、Java Collection ArrayList Loopの特定の要素を削除する方法のコンテンツ全体です。誰もがwulin.comをサポートすることを願っています〜