2012-12-06 4 views
-3

안드로이드에서 ArrayList을 사용할 때 ConcurrentModificationException을 피하는 방법?ArrayList를 사용할 때 ConcurrentModificationException을 피하는 방법?

누군가가 그것을 피하기 위해 엄지 손가락의 기본 규칙을 줄 수 있습니까?

+2

'ConcurrentModificationException'에 대해 이야기하고 있습니까? 도움이 필요하면 문제의 정확한 세부 정보를 제공해야합니다. – jlordo

+0

arraylist 방법을 사용하고 있습니까? –

답변

7

arraylist를 반복 할 때 요소를 추가/제거하지 않음.

이 코드는 반복 중에 목록을 수정하면서 ConcurrentModificationException을 발생시킵니다.

List<String> al = new ArrayList<String>(); 
al.add("2"); 
for(String s: al) { 
al.remove("2"); 
} 

이 코드는 ConcurrentModificationException을 throw하지 않습니다.

List<String> al = new Arraylist<String>(); 
Iterator<String> itr = al.iterator(); 
while(itr.hasNext()){ 
    itr.next(); 
    itr.remove(); 
}  

반복하는 동안 목록을 수정할 때 또한 ConcurrentModificationException를 포기하지 것이다 java.util.Concurrent 패키지 등 java.util.concurrent.CopyOnWriteArrayList에서 클래스의 일부를 사용할 수 있습니다 : 당신이 추가 할 때

CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList<String>(); 
    al.add("2"); 
    Iterator<String> itr = al.iterator(); 
    while(itr.hasNext()){ 
    itr.next(); 
    al.add("3"); 
} 
0

이 발생/제거/요소를 반복하면서 ArrayList에 요소를 삽입하십시오. 나쁜 코드의

예 :

Iterator it = list.iterator() 
while (it.hasNext()) 
{ 
    Object o = it.next(); 
    list.remove(o); 
} 
1

당신이 ArrayList의 요소를 제거하는 경우는, 반복자를 사용합니다. 예 :

ArrayList<String> someStrings; 
// fill someStrings 
Iterator<String> it = someStrings.iterator(); 
while(it.hasNext()){ 
    String buf = it.next(); 
    // do sth here 
} 
관련 문제