JAVA | ArrayList에 remove() 처리 시 주의할 점

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번째의 메소드 시그니처 함수를 호출하도록 바꿨다. 이후 제대로 동작한다. 주의하자.

아래의 문제처럼 그래프 문제에서 기존 간선을 뒤집거나 제거해야 할 때 필요하다. 잘 기억해두자.

 

백준 | 3655번. 최종 순위 - 위상 정렬 문풀

⬛ 백준 3655번. 최종 순위 - 위상 정렬 문풀 https://www.acmicpc.net/problem/3665 3665번: 최종 순위 올해 ACM-ICPC 대전 인터넷 예선에는 총 n개의 팀이 참가했다. 팀은 1번부터 n번까지 번호가 매겨져 있다. 놀

ccclean.tistory.com

728x90