List.add()시 UnsupportedOperationException 발생 에러 해결



개요

백준 문제를 풀며 List를 사용할 일이 있어 사용 중 List.add()를 했는데 UnsupportedOperationException이 발생하였다.

전혀 문제가 없어보였던 구문이라 나왔던 Exception 구문으로 이래저래 검색하다가 찾은 블로그 글.

원인

역시나 스택오버플로우 없이는 못살아… 해당 글을 쓰신분도 본인과 같은 문제로 검색하다가 해당 StackOverflow글을 찾으셨다고 한다.

모든 Listadd() 메서드를 구현, 지원하지 않으며 가장 일반적인 예로 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를 하고 있어 생기는 문제였다.

image-20210413212337369

해당 에러 로그의 stackTrace를 따라갔을때 add(index, value) 메서드를 사용하면 무조건 throw new UnsupportedOperationException()의 예외를 던지도록 되어있어 이상하다 이상하다 생각했는데, 해당 Arrays.asList()에서는 우리가 흔히 알고있는 ArrayList를 반환하는것이 아닌 Arrays 클래스 내부에 inner Class로 구현해놓은 ArrayList를 반환하도록 되어있었다.

해결

결국 Array.asList()의 사용을 포기했다.

해당 기능이 필요했기때문에 결국 하나씩 add하는 방식으로 변경했다. 그리고 사실상 저 문제는 해당 메서드를 사용하면 시간초과로 실패한다…….ㅠ

해당 메소드를 많이 사용했지만, 중간에 삽입할일이 딱히 없어 몰랐는데.. 이번에 처음 알게 되었다.


출처

List 에 add() 했을때 UnsupportedOperationException 나는 경우




© 2019. by mintheon

Powered by mintheon