###ConcurrentModificationExceptionについて
JavaSilverの問題から抜粋したものです。
コード⓵とコード②について、要素数以外はすべて同じ処理のはずなのですが、
コード②はConcurrentModificationExceptionが発生してしまいます。
###コード⓵
Java
1import java.util.ArrayList; 2import java.util.List; 3 4public class ListA { 5 public static void main(String[] args) { 6 ArrayList<String> list = new ArrayList<>(); 7 list.add("A"); 8 list.add("B"); 9 list.add("C"); 10 for (String str : list) { 11 if ("B".equals(str)) { 12 list.remove(str); 13 }else { 14 System.out.println(str); 15 } 16 } 17 } 18} 19//実行結果:A 20
###コード②
Java
1import java.util.ArrayList; 2import java.util.List; 3 4public class ListA { 5 public static void main(String[] args) { 6 ArrayList<String> list = new ArrayList<>(); 7 list.add("A"); 8 list.add("B"); 9 list.add("C"); 10 list.add("D"); 11 list.add("E"); 12 for (String str : list) { 13 if ("C".equals(str)) { 14 list.remove(str); 15 }else { 16 System.out.println(str); 17 } 18 } 19 } 20} 21//実行結果: 22//A 23//B 24//Exception in thread "main" java.util.ConcurrentModificationException 25
###前提・質問
APIリファレンスによると、
あるスレッドがCollectionで反復処理を行っている間に、別のスレッドがそのCollectionを変更することは一般に許可されません
とのことですが、ではなぜコード⓵では例外が発生しないのでしょうか?
有識者の方、教えていただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。