Java для каждого цикла работает
Я работал над определенной задачей,когда случайно сделал что-то не так по мне но код выполнен и дал правильный результат. Я был немного удивлен и имел в виду, как все это работает для каждого цикла. Пример (пример программы),
public static void main( String[] args )
{
String myInput = "hello , hi , how are you ";
String[] splitted = myInput.split(",");
List mylist = new ArrayList();
for (String output : splitted)
{
mylist.add(output);
}
for (String output : mylist)
{
System.out.println(output);
mylist = new ArrayList(); //It worked
mylist.add(output);
}
for (String output : splitted)
{
mylist.add(output);
}
for (String output : mylist)
{
System.out.println(output);
mylist.add(output); // After this line it threw exception java.util.ConcurrentModificationException
}
}
Мне было интересно узнать, и во время поиска я нашел еще один пост, в котором говорилось, что мы можем удалить элементы из списка, если мы используем итераторный подход, поэтому я попытался,
for (String output : splitted)
{
mylist.add(output);
}
for (Iterator iterator2 = mylist.iterator(); iterator2.hasNext();)
{
String string = (String) iterator2.next();
System.out.println(string);
iterator2.remove(); //It worked but if I used the same thing to remove element from original list it threw exception.
}
Теперь я просто хочу знать, что происходит за каждым для каждого цикла, указанного выше.
Я хочу знать технический аспект, я знаю, что не могу изменить коллекцию для каждого цикла, но в некоторых случаях, указанных выше, это сработало, почему?