ホームページ > Java > &#&チュートリアル > For-Each ループ中に ArrayList を変更すると ConcurrentModificationException が発生するのはなぜですか?

For-Each ループ中に ArrayList を変更すると ConcurrentModificationException が発生するのはなぜですか?

Barbara Streisand
リリース: 2024-12-13 08:06:11
オリジナル
922 人が閲覧しました

Why Does Modifying an ArrayList During a For-Each Loop Cause a ConcurrentModificationException?

ConcurrentModificationException for ArrayList

次のコードを考えてみましょう:

private String toString(List<DrugStrength> aDrugStrengthList) {
    StringBuilder str = new StringBuilder();
        for (DrugStrength aDrugStrength : aDrugStrengthList) {
            if (!aDrugStrength.isValidDrugDescription()) {
                aDrugStrengthList.remove(aDrugStrength);
            }
        }
        str.append(aDrugStrengthList);
        if (str.indexOf("]") != -1) {
            str.insert(str.lastIndexOf("]"), "\n          " );
        }
    return str.toString();
}
ログイン後にコピー

このコードを実行すると、ConcurrentModificationException がトリガーされます。この例外は、for each ループを使用して ArrayList を反復処理する際に ArrayList を変更することが安全でないために発生します。

この問題を解決するには、for each ループを反復子ループに置き換えます。

for (Iterator<DrugStrength> it = aDrugStrengthList.iterator(); it.hasNext(); ) {
    DrugStrength aDrugStrength = it.next();
    if (!aDrugStrength.isValidDrugDescription()) {
        it.remove();
    }
}
ログイン後にコピー

An iterator は、ArrayList を反復処理する際に ArrayList から要素を削除する安全な方法を提供します。リスト内の現在位置を追跡するカーソルを維持し、要素の削除が反復プロセスに影響を与えないようにします。

以上がFor-Each ループ中に ArrayList を変更すると ConcurrentModificationException が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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