ArrayList에 대한 ConcurrentModificationException
다음 코드를 고려하세요.
private String toString(List<DrugStrength> aDrugStrengthList) { StringBuilder str = new StringBuilder(); for (DrugStrength aDrugStrength : aDrugStrengthList) { if (!aDrugStrength.isValidDrugDescription()) { aDrugStrengthList.remove(aDrugStrength); } } str.append(aDrugStrengthList); if (str.indexOf("]") != -1) { str.insert(str.lastIndexOf("]"), "\n " ); } return str.toString(); }
이 코드가 실행되면 ConcurrentModificationException이 발생합니다. 이 예외는 foreach 루프를 사용하여 반복하는 동안 ArrayList를 수정하는 것이 안전하지 않기 때문에 발생합니다.
이 문제를 해결하려면 foreach 루프를 반복기 루프로 바꾸세요.
for (Iterator<DrugStrength> it = aDrugStrengthList.iterator(); it.hasNext(); ) { DrugStrength aDrugStrength = it.next(); if (!aDrugStrength.isValidDrugDescription()) { it.remove(); } }
An iterator는 반복하는 동안 ArrayList에서 요소를 제거하는 안전한 방법을 제공합니다. 목록의 현재 위치를 추적하는 커서를 유지 관리하여 요소 제거가 반복 프로세스에 영향을 미치지 않도록 합니다.
위 내용은 For-Each 루프 중에 ArrayList를 수정하면 ConcurrentModificationException이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!