> Java > java지도 시간 > 반복 중에 ArrayList를 수정할 때 ConcurrentModificationException을 방지하는 방법은 무엇입니까?

반복 중에 ArrayList를 수정할 때 ConcurrentModificationException을 방지하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-30 20:25:13
원래의
1003명이 탐색했습니다.

How to Avoid ConcurrentModificationException When Modifying an ArrayList During Iteration?

반복 중 ArrayList를 수정하는 동안 ConcurrentModificationException

보고된 예외는 ConcurrentModificationException입니다. 이는 ArrayList, mElements를 수정하려는 시도에서 발생합니다. 반복합니다.

내부 OnTouchEvent 핸들러에는 특정 조건을 확인하기 위해 Iterator를 사용하여 mElements를 반복하는 루프가 있습니다.

for (Iterator<Element> it = mElements.iterator(); it.hasNext();){
    Element element = it.next();

    // Check element's position and other conditions...

    if(element.cFlag){
        mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY)); // ConcurrentModificationException occurs here
        element.cFlag = false;
    }
}
로그인 후 복사

그러나 Iterator를 사용하여 반복하는 동안 ArrayList를 수정(새 요소 추가)하면 오류가 발생할 수 있습니다. ConcurrentModificationException.

해결 방법:

이 예외를 방지하려면 추가해야 하는 요소를 저장하기 위한 별도의 목록을 만들고 해당 요소를 기본 목록에 추가하는 것이 하나의 옵션입니다. 반복 완료 후:

List<Element> thingsToBeAdd = new ArrayList<Element>();
for(Iterator<Element> it = mElements.iterator(); it.hasNext();) {
    Element element = it.next();

    // Check element's position and other conditions...

    if(element.cFlag){
        // Store the new element in a separate list for later addition
        thingsToBeAdd.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
        element.cFlag = false;
    }
}

// Add all elements from the temporary list to the main list
mElements.addAll(thingsToBeAdd );
로그인 후 복사

대안 접근 방식:

또 다른 접근 방식은 목록의 복사본을 반복하여 ConcurrentModificationException:

for (Element element : mElements) {

    // Check element's position and other conditions...

    if(element.cFlag){
        mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY)); // No ConcurrentModificationException
        element.cFlag = false;
    }
}
로그인 후 복사
을 방지하는 향상된 for-each 루프를 사용하는 것입니다.

위 내용은 반복 중에 ArrayList를 수정할 때 ConcurrentModificationException을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿