[解決済み】ArrayListの反復処理と要素の削除でjava.util.ConcurrentModificationExceptionを回避する方法
2022-04-02 11:30:05
質問
ArrayListを反復処理したい。反復処理中に、同時に要素を削除する必要があります。明らかに、これは
java.util.ConcurrentModificationException
.
この問題を処理するためのベストプラクティスは何でしょうか?最初にリストのクローンを作成すべきでしょうか?
ループ内ではなく、別の箇所で要素を削除しています。
私のコードは次のようなものです。
public class Test() {
private ArrayList<A> abc = new ArrayList<A>();
public void doStuff() {
for (A a : abc)
a.doSomething();
}
public void removeA(A a) {
abc.remove(a);
}
}
a.doSomething
を呼び出すかもしれません。
Test.removeA()
;
解決方法は?
2つの選択肢があります。
-
削除したい値のリストを作成します。
追加
をループの中でそのリストに追加し、次に
originalList.removeAll(valuesToRemove)
最後に -
を使用します。
remove()
メソッドをイテレータ自体に追加します。これは、拡張されたforループが使えないことを意味することに注意してください。
2番目のオプションの例として、リストから長さが5より大きい文字列をすべて削除する。
List<String> list = new ArrayList<String>();
...
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
String value = iterator.next();
if (value.length() > 5) {
iterator.remove();
}
}
関連
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] コレクションを反復処理し、ループ内でオブジェクトを削除する際に ConcurrentModificationException を回避する。
-
[解決済み] ThreadLocal変数はいつ、どのように使用すればよいですか?
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み] ArrayListから繰り返される要素を削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javaで拡張子なしのファイル名を取得する方法は?
-
[解決済み] java.sql.SQLException: ORA-00933: SQL コマンドが正しく終了していません。
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] このフォーマット(Tue Jul 13 00:00:00 CEST 2010)の日付をJavaの日付に変換する方法(文字列はalfrescoのプロパティに由来しています)
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] Androidのコールバックとは何ですか?重複
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] init-paramとcontext-param
-
[解決済み] `ArrayList` の反復処理中に要素を削除する際に "ConcurrentModificationException" を回避するにはどうすればよいですか?[重複している]。