728x90
🎈 ArrayList에 remove() 처리 시 주의할 점 | IndexOutOfBoundsException
IndexOutOfBoundsException 예외가 계속해서 발생했다.
이는 ArrayList의 remove() 메소드 정의가 2개 있기 때문이다.
내가 호출하려고 헀던 메소드의 시그니처는 두 번째인데, int 형으로 remove()를 시도하니 첫 번째 메소드 시그니처를 호출했기 때문에 발생한 Exception이었다.
1) int remove(int idx)
// 지울 값의 인덱스 인자로 해당 값 지우고 지운 값을 int형으로 리턴
→ 이 메소드가 호출되면서 접근한 idx 범위가 실제 list 범위 넘어서서 Exception 터짐
2) boolean remove(Object obj)
// 지울 값의 obj를 인자로 줘서 해당 값이 list 상에 존재한다면 삭제 후 true리턴, 없다면 false 리턴
📌따라서 list에 접근해서 일부 값을 remove() 처리할 때는 주의해야 한다. 내 경우에는 int를 Wrapper 클래스인 Integer로 감싸서 Object 타입으로 형변환 시켜 자동으로 2번째의 메소드 시그니처 함수를 호출하도록 바꿨다. 이후 제대로 동작한다. 주의하자.
아래의 문제처럼 그래프 문제에서 기존 간선을 뒤집거나 제거해야 할 때 필요하다. 잘 기억해두자.
728x90
'코딩 테스트 [준비] > JAVA | 활용할 문법 정리' 카테고리의 다른 글
JAVA | 객체 비교하기 - equals()와 hashCode() 재정의 (43) | 2023.12.22 |
---|---|
JAVA | HashMap에서 ConcurrentModificationException 발생 시[해결] (0) | 2023.10.18 |
JAVA | Deque - Double-ended-queue (덱/데크) 사용법 (0) | 2023.08.14 |
JAVA | 구분자 여러개일 때 split() 정규식으로 뽑는 방식 (0) | 2023.07.21 |
JAVA | 알파벳, 대/소문자 확인하는 방법 | isUpperCase(), isLowerCase(), isAlphabetic() (0) | 2023.07.21 |