java.util.ConcurrentModificationException  오류가 발생할때는 대부분 컬렉션 삭제할때이다.

이럴때는 Iterator를 사용하면 된다.


<< 잘못된 코드 >>

   
private ArrayList<mediastorefileinfo> mItems;

for (MediaStoreFileInfo info : mItems) {
	if(!info.getSelected()) mItems.remove(info);
}


===>


<< 정상적인 코드 >>

   
for (Iterator<mediastorefileinfo> iterator = mItems.iterator(); iterator.hasNext() ; ) {

	MediaStoreFileInfo info = iterator.next();
	if(!info.getSelected()){
		iterator.remove();
	}
}


<< 잘못된 코드 >>


  
for( Pixel px : pixel){ 
[...]
  if(px.y > gHeigh){
     pixel.remove(pixel.indexOf(px)); // here is the thing
     pixel.remove(px); //doesn't work either
  }
}


<< 정상적인 코드 >>


  
for (Iterator<Pixel> iterator = pixels.iterator(); iterator.hasNext(); ) {

  Pixel px = iterator.next();
  if(px.y > gHeigh){
    iterator.remove();
  }
}


참고 : http://stackoverflow.com/questions/9691328/removing-object-from-arraylist-in-for-each-loop

+ Recent posts