사이드 프로젝트에서 사용자 목록을 관리하던 중, 반복문을 통해 조건에 맞는 요소를 삭제하려고 합니다.
코드:
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> users = new ArrayList<>(Arrays.asList("User1", "User2", "User3"));
for (int i = 0; i < users.size(); i++) {
if (users.get(i).contains("User")) {
users.remove(i);
}
}
System.out.println(users);
}
}
오류: java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 2
시도: 루프의 조건식을 `i < users.size() - 1`로 변경해 보았으나 마지막 요소가 삭제되지 않는 현상이 발생함.
질문: 반복문 내부에서 요소를 삭제할 때 인덱스 범위 초과 오류를 방지하려면 어떻게 해야 합니까?
댓글5
-
빗방울
2026.10.30 23:00
-
빗방울
2026.10.30 23:53
아니면 Iterator 써서 remove 하는 방법도 있음.
이게 정석이라 나중에도 편할 듯요ㅋㅋ
-
빗방울
2026.10.31 00:58
그냥 i++ 를 if 문 밖으로 빼서
삭제 안 했을 때만 인덱스 올리는 식으로 짜도 될 듯요ㅋㅋ 이렇게 하면 안 밀림
-
빗방울
2026.10.31 01:37
스트림 쓰면 필터링해서 새 리스트 만드는 식으로 짤 수 있겠네요ㅋㅋ
그게 가독성은 제일 좋을 듯요
-
빗방울
2026.10.31 01:50
근본적인 원인은 리스트 크기가 실시간으로 변해서 그런 거임ㅋㅋ
차라리 삭제할 대상 인덱스만 따로 리스트에 담아뒀다가
나중에 한꺼번에 지우는 방식도 나쁘지 않을 듯요
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
총 1455개의 이야기
이거 remove 하면 인덱스 밀려서 그런 거임.
그냥 removeIf 쓰면 한 줄로 끝날 듯요.
아니면 역순으로 돌려보셈ㅋㅋ