I am learning about collection classes in Java. I created an ArrayList and added some values to it.
package LearningJava;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
public class Java{
public static void main(String args[]) {
Collection values = new ArrayList();
values.add(2);
values.add(3);
values.add(5);
values.add(4);
Iterator itr = values.iterator();
for(int i = 0 ; i<values.size();i++) {
System.out.println(itr.next());
}
}
}
I also iterated through this ArrayList.
If I add values after creating, the object of iterator throws an exception.
package LearningJava;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
public class Java{
public static void main(String args[]) {
Collection values = new ArrayList();
values.add(2);
values.add(3);
values.add(5);
Iterator itr = values.iterator();
values.add(4);
for(int i = 0 ; i<values.size();i++) {
System.out.println(itr.next());
}
}
}
It throws a java.util.ConcurrentModificationException
. Why can't I add values after creating the object of iterator?
It is only throwing this exception in case of Iterator interface. When I create the object of other classes, it does not throw any exception.
package LearningJava;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
public class Java{
public static void main(String args[]) {
Collection values = new ArrayList();
values.add(2);
values.add(3);
values.add(5);
// creating the object of scanner instead of iterator's.
Scanner input = new Scanner(System.in);
values.add(4);
Iterator itr = values.iterator();
for(int i = 0 ; i<values.size();i++) {
System.out.println(itr.next());
}
}
}
Here it is not showing any errors. Why is this?