Java : Exception in thread "main" java.util.ConcurrentModificationException

When Exception in thread "main" java.util.ConcurrentModificationException occurs.

package com.ekiras.demo;

import java.util.ArrayList;
import java.util.List;

public class Test {

	public static void main(String args[]){

		// create a new list 
		List<String> list = new ArrayList<String>();
		
		// add 50 items to the list
		for(int itr=0;itr<50;itr++)
			list.add("user-"+(itr+1));
		
		// try to remove item from list while iterating the list
		for(String str : list){
			if(str.equals("user-15")){
				list.remove(str);
			}
		}
	}
	
}

The above code will give the following error.
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
	at java.util.ArrayList$Itr.next(ArrayList.java:831)
	at testing.Test.main(Test.java:18)

How to avoid ConcurrentModificationException


  • Create the list of type CopyOnWriteArrayList, this will create a new copy of list for every operation performed and then replace it with original.
    List<String> list = new CopyOnWriteArrayList<String>();
  • Create a new copy of the list for iterating the list
    for(String str : new ArrayList<String>(list))
  • Use the Iterator to iterate the list and modify its contents.
    Iterator<String> iterator = list.iterator();
    	while(iterator.hasNext()){
    		String str = iterator.next();
    		if(str.equals("user-15")){
    			iterator.remove();
    		}
    	}
    

No comments :

Post a Comment