Javaでリスト内の要素をループして削除する方法のまとめ

高洛峰
リリース: 2017-01-22 16:14:05
オリジナル
1383 人が閲覧しました

私の印象では、for ループを使用してリスト内の要素を循環的に削除するのには問題がありますが、拡張された for ループを使用することもできます。その後、今日使用中にエラーを見つけたので、科学的な調査をすることにしました。と思ったら、これは誤解だったことが分かりました。以下でそれについて話しましょう。 。手を伸ばせば記事の最後まで直接ジャンプできます。概要を参照してください。 。

JAVA でリストをループするには、for ループ、拡張 for ループ (foreach ループとも呼ばれます)、および反復子トラバーサルの 3 つの方法があります。

1. for ループはリストを走査します

for(int i=0;i<list.size();i++){
  if(list.get(i).equals("del"))
    list.remove(i);
}
ログイン後にコピー

このメソッドの問題は、要素を削除するとリストのサイズが変化し、インデックスも変化するため、走査中に何かを見落とす可能性があることです。 . 特定の要素を削除します。たとえば、最初の要素を削除し、インデックスに従って 2 番目の要素にアクセスし続けると、削除によって後続の要素が 1 つ前に移動するため、実際には 3 番目の要素にアクセスされます。したがって、この方法は特定の要素を削除する場合に使用できますが、ループ内の複数の要素を削除する場合には適していません。

2. 拡張された for ループ

for(String x:list){
  if(x.equals("del"))
    list.remove(x);
}
ログイン後にコピー

このメソッドの問題は、要素を削除した後にループを続けると、エラー メッセージ ConcurrentModificationException が報告されることです。これは、使用時に要素が同時に変更され、例外がスローされるためです。ただし、削除直後に Break を使用してジャンプした場合は、エラーは発生しません。

3. イテレータトラバーサル

Iterator<String> it = list.iterator();
while(it.hasNext()){
  String x = it.next();
  if(x.equals("del")){
    it.remove();
  }
}
ログイン後にコピー

このメソッドは通常通り循環して削除できます。ただし、イテレータの削除メソッドを使用する場合、リストの削除メソッドを使用する場合は、上記の ConcurrentModificationException エラーも報告されることに注意してください。

概要:

(1) リスト内の特定の要素をループするには、3 つの方法のいずれかを使用できますが、使用中に上記で分析した問題に注意する必要があります。

(2) リスト内の複数の要素をループするには、iterator メソッドを使用する必要があります。

Java でリスト内の要素を循環的に削除する方法の上記の要約は、エディターによって共有されたすべての内容です。参考になれば幸いです。また、PHP 中国語 Web サイトをサポートしていただければ幸いです。

Java でループ内のリスト内の要素を削除する方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

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