Javaコレクションクラスのarraylistループ内の特定の要素を削除するメソッド

高洛峰
リリース: 2017-01-22 16:12:06
オリジナル
1712 人が閲覧しました

プロジェクト開発中、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 サイトの記事にご注目ください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート