I found this statement if a thread modifies a collection directly while it is iterating over the collection with a fail-fast iterator, the iterator will throw this exception. at http://download.oracle.com/javase/6/docs/api/java/util/ConcurrentModificationException.html.
I found the concurrent modification is even thrown in below code
List<Employee> lista= new ArrayList();
Employee emp1=new Employee();
Employee emp2=new Employee();
Employee emp3=new Employee();
lista.add(emp1);
lista.add(emp2);
lista.add(emp3);
for(Employee emp:lista)
{
emp2.setEmpId(2);
lista.remove(emp2);
}
Question1:- So can i say enhance for loop also uses the fail-fast iterator internally?Though when i execute below code it works fine
for(int i=0;i<lista.size();i++)
{
Employee empTemp=lista.get(i);
lista.remove(emp2);
}
Question2:- Another question is when statement say
if a thread modifies a a collection
My guess is that modification means here removal or addition not for update of element inside collection for list interface while it also includes modification of element for set interface . Right? At least the programmes i tried it is the case with them.
Edit
Regarding set i doubt my above statement i.e it throws concurrent modification exception when we try to modify set while iterating.I tried below code but it did not throw any exception
HashSet<Employee> set1= new HashSet();
Employee emp4=new Employee();
Employee emp5=new Employee();
Employee emp6=new Employee();
set1.add(emp4);
set1.add(emp5);
set1.add(emp6);
Iterator iter1=set1.iterator();
while(iter1.hasNext())
{
Employee emp12=(Employee)iter1.next();
System.out.println("");
emp5.setEmpId(2);
}
Ideally as per statement if the set is modified at any time after the iterator is created at
http://download.oracle.com/javase/6/docs/api/java/util/HashSet.html it should throw the concurrent modification exception but it did not . Not sure why?
Yes, thats right. Have a look at the compiled code, with the
javapcommand to verify this if you like.Thats right, if you do
emp1.setEmpId(2)or something similar, the iteration will not fail.It only throws the exception if you modify the list. Keep in mind that the list contains references to objects. If you modify the objects, the references does not change, thus the list does not change.