Следующий код генерирует java.util.ConcurrentModificationException, как и ожидалось:
public void test(){
ArrayList<String> myList = new ArrayList<String>();
myList.add("String 1");
myList.add("String 2");
myList.add("String 3");
myList.add("String 4");
myList.add("String 5");
for(String s : myList){
if (s.equals("String 2")){
myList.remove(s);
}
}
}
Однако следующий код не бросает исключение, в то время как я ожидаю, что оно будет брошено:
public void test(){
ArrayList<String> myList = new ArrayList<String>();
myList.add("String 1");
myList.add("String 2");
myList.add("String 3");
for(String s : myList){
if (s.equals("String 2")){
myList.remove(s);
}
}
}
Разница в том, что первый список содержит 5 элементов, а второй список содержит 3. Используемый JVM:
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
Вопрос: почему вторая часть кода НЕ бросает java.util.ConcurrentModificationException?