import java.util.*;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(List.of(1, 2, 3));
for (Integer n : list) {
if (n == 2) list.remove(n);
}
System.out.println(list);
}
}
選択肢
- あなたの回答
- 正解
正解
C. 実行時に ConcurrentModificationException が発生する
詳細解説
拡張 for 文は内部的にイテレータを使います。イテレータを通さずにリストを変更すると、次の next() 呼び出し時に ConcurrentModificationException がスローされます。
なぜ他の選択肢が違うのか
- 変更が検出されるため正常に [1, 3] が返ることはありません。
- 例外がスローされるため [1, 2] にはなりません。
- 構文としては正しくコンパイルできます。
罠ポイント
イテレータ経由で安全に削除したい場合は Iterator.remove() を使うか、removeIf() メソッドを利用しましょう。