List를 사용하다가 add() 나 remove() 함수를 쓸 때 UnsupportedOperationException 이 발생할 경우가 있다.
List의 생성 방법에 따라 add(), remove() 사용 시, Exception을 발생할 수 있다. 예제로 살펴보자
1. 예제
List<String> list = Arrays.asList("dog", "cat");
list.add("horse");
list.remove("dog");
Exception
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.AbstractList.add(AbstractList.java:153)
at java.base/java.util.AbstractList.add(AbstractList.java:111)
at test/test.Manager.main(Manager.java:13)
Arrays.asList()로 List를 생성하고 List에 값을 추가나 삭제하는 경우 UnsupportedOperationException이 발생한다.
Arrays.asList()의 API 문서를 보면 사이즈가 고정(fixed-size list)된 List 객체를 return 해주는 것을 알 수 있다.
실제로 Arrays.asList()가 반환된 list의 add()나 remove()가 구현되어 있지 않은 것을 볼 수 있다.
2. 해결방법
객체 수정이 구현되어 있는 ArrayList <>(또는 Vector, LinkedList)를 사용하면 해결된다.
ListList<String> list = new ArrayList<>(Arrays.asList("dog", "cat"));
list.add("horse");
list.remove("dog");
반응형
'Java' 카테고리의 다른 글
[Java] JSONArray에서 JSONObject 값 얻어오기 (0) | 2020.07.12 |
---|---|
[Java] java.lang.ArrayIndexOutOfBoundsException (0) | 2020.06.13 |
Java String을 int로 변환, int를 String으로 변환 - String to int, int to String (0) | 2020.05.27 |
Java 리스트(List) 구현 - ArrayList, Vector, LinkedList (0) | 2020.05.24 |
Java byte array를 String으로 String을 byte array로 변환 (2) | 2020.05.15 |
Java parseInt() vs valueOf() 차이점, parseFloat() vs valueOf() 차이점 (0) | 2020.05.11 |
Java String을 Json으로, Json을 String으로 변환 (0) | 2020.05.04 |
java.lang.IndexOutOfBoundsException (0) | 2020.05.04 |