반복하는 동안 컬렉션에서 개체를 제거하는 가장 안전한 "아마도 안전한"방법은 먼저 Iterator
을 검색하고 필요할 때 루프를 수행하고 제거하는 것입니다. 나는 불행하게도 이해, 그리고 것이 무엇 Iterator의 remove 메서드로 실제로 개체를 제거하는 방법
Iterator iter=Collection.iterator();
while(iter.hasNext()){
Object o=iter.next()
if(o.equals(what i'm looking for)){
iter.remove();
}
}
이 제거
경우, 수행하는 방법에 대한 깊은 기술적 인 설명을 발견하지 않았습니다 :
for(Object o:myCollection().getObjects()){
if(o.equals(what i'm looking for)){
myCollection.remove(o);
}
}
가 ConcurrentModificationException
를 던질 것인가, 무엇을 "기술 용어로"Iterator.remove()
합니까? 개체를 제거하고 루프를 중단하고 루프를 다시 시작합니까?
나는 공식 문서를 참조하십시오
는 "현재 요소를 제거하는 시도가 다음 () 호출에 의해 선행되지 않도록
remove()
를 호출하려 할 경우,IllegalStateException
를 발생시킵니다.."
부분은 나에게 "일반"루프에서 일어나는 동일한 상황을 생각하게, "현재 요소를 제거"=> (평등 테스트를 수행하고 필요한 경우 제거), 그런데 왜 반복자 루프가 ConcurrentModification- 안전한?
당신이 직접 볼 수 있습니다은 https ://gist.github.com/kibotu/e480bd7505615a7311a6 –