List.add()시 UnsupportedOperationException 발생 에러 해결
개요
백준 문제를 풀며 List를 사용할 일이 있어 사용 중 List.add()
를 했는데 UnsupportedOperationException
이 발생하였다.
전혀 문제가 없어보였던 구문이라 나왔던 Exception 구문으로 이래저래 검색하다가 찾은 블로그 글.
원인
역시나 스택오버플로우 없이는 못살아… 해당 글을 쓰신분도 본인과 같은 문제로 검색하다가 해당 StackOverflow글을 찾으셨다고 한다.
모든 List
는 add()
메서드를 구현, 지원하지 않으며 가장 일반적인 예로 Arrays.asList();
같은 경우 고정된 사이즈의 Array를 리턴한다. 그렇기에 사이즈를 수정할 수 없다.
현재 대강 내 코드는 이러하다. 간단하게 리스트 중간에 어떠한 문자열을 집어넣는 로직이다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String text = br.readLine();
List<Charactor> list = Array.asList(text.split(""));
list.add(2, 'a');
현재 Arrays.asList();
를 통해 만들어진 리스트에 중간 삽입용 add
를 하고 있어 생기는 문제였다.
해당 에러 로그의 stackTrace를 따라갔을때 add(index, value)
메서드를 사용하면 무조건 throw new UnsupportedOperationException()
의 예외를 던지도록 되어있어 이상하다 이상하다 생각했는데, 해당 Arrays.asList()
에서는 우리가 흔히 알고있는 ArrayList
를 반환하는것이 아닌 Arrays
클래스 내부에 inner Class
로 구현해놓은 ArrayList
를 반환하도록 되어있었다.
해결
결국 Array.asList()
의 사용을 포기했다.
해당 기능이 필요했기때문에 결국 하나씩 add하는 방식으로 변경했다. 그리고 사실상 저 문제는 해당 메서드를 사용하면 시간초과로 실패한다…….ㅠ
해당 메소드를 많이 사용했지만, 중간에 삽입할일이 딱히 없어 몰랐는데.. 이번에 처음 알게 되었다.