-
[Java] Arrays.asList vs new ArrayList카테고리 없음 2022. 9. 7. 08:00반응형
java에서 리스트로 만들 때 자주 사용하는 Arrays.asList()
아래와 같이 사용할 수 있다.
@Test void asListTest(){ List<String> list = Arrays.asList("test1", "test2", "test3"); // todo list.forEach(System.out::println); }
출력은 기대한 것과 같이 3개의 문자열을 출력한다.
여기서 list에 하나의 문자열을 추가해보면 기대와는 다른 결과를 확인할 수 있다.
@Test void asListTest(){ List<String> list = Arrays.asList("test1", "test2", "test3"); list.add("test4"); list.forEach(System.out::println); }
실행을 하면 아래와 같은 에러를 확인할 수 있다.(UnsupportedOperationException)
여기서 Arrays.asList의 설명을 보면 아래와 같이 기술되어 있다.
/** * Returns a fixed-size list backed by the specified array. * ... */ @SafeVarargs @SuppressWarnings("varargs") public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }
고정된 크기의 리스트를 반환한다고 되어 있다.
그리고 반환하는 new ArrayList<>(a)를 따라가 보면 Arrays 클래스 내부에 구현된 ArrayList를 볼 수 있다.
그리고 해당 ArrayList에는 add()가 구현되어 있지 않아서 UnsupportedOperationException을 발생시킨다.
다음으로 List를 new ArrayList<>() 로 생성한 뒤 따라가 보면 ArrayList 클래스로 도착한다.
List<String> arrayList = new ArrayList<>();
결국 List라는 형태를 반환하지만, 서로 다른 동작을 하기 때문에 용도에 맞춰 사용을 해야 한다.
- 위 작성된 글에는 잘못된 부분이 있을 수 있습니다. 알려주시면 수정하겠습니다.
※ info
IDE : IntelliJ IDEA 2022.2 (Ultimate Edition)
Java : openjdk 11
OS : Windows 10 Pro반응형