-
[Java] Arrays.asList()와 List.of()의 차이개발 지식/Java 2023. 11. 15. 12:08
공통점
- 매개변수로 가변인자를 받아서(여러 요소나 배열도 가능) list를 반환한다.
- 리스트의 크기를 변경할 수 없다.
차이점
변경 가능 여부
- Arrays.asList()로 반환된 list는 변경이 가능하지만 List.of()에서 반환된 list는 변경이 불가능하다.
- 그 이유는 Arrays.asList()는 Arrays의 내부 클래스인 ArrayList를 반환하고, 여기에는 set 등이 구현되어 있지만 List.of()는 ListN이라는 타입의 객체를 반환하는데, 이는 불변 객체(Immutable object)이기 때문에 수정할 수 없다. (ListN 타입은 정확하게는 ImmutableCollections.ListN 타입이다)
Null 허용 여부
- Arrays.asList()는 null을 허용하고 List.of()는 허용하지 않는다.
참조 / 비참조
- Arrays.asList(array)는 참조를 사용하기 때문에 배열의 값이 변경되면 list에도 영향이 간다.
Integer[] array = {1, 2}; List<Integer> list = Arrays.asList(array); array[0] = 100; System.out.println(list); // [100, 2]
- List.of(array)의 결과는 값을 기반으로 독립적인 객체를 만들기 때문에 참조가 일어나지 않는다.
Integer[] array = {1, 2}; List<Integer> list = List.of(array); array[0] = 100; System.out.println(list); // [1, 2]
메모리 사용
- Arrays.asList()는 List.of()보다 힙에 더 많은 객체를 생성하기 때문에 더 많은 오버헤드 공간을 차지한다. 따라서, 단지 값 요소가 필요한 경우라면 List.of()가 적합하다.
- 예를 들어, 단순히 Array를 ArrayList 또는 HashSet 등으로 변환하기 위해서는 List.of()가 적합하다.
List<String> list = new ArrayList<>(List.of(array)); Set<String> set = new HashSet<>(List.of(array));
요약
Arrays.asList() List.of() 변경 가능 여부 변경 가능 변경 불가능 Null 허용 여부 허용 허용하지않음 참조 / 비참조 참조 비참조 메모리 사용 상대적으로 많음 상대적으로 적음 - Arrays.asList()는 크고 동적인 데이터에 사용하고, List.of()는 작고 변경되지 않는 데이터의 경우 사용하는 것이 좋다.
참고 자료
https://jaehoney.tistory.com/144
Java - Arrays.asList vs List.of 차이 (완벽 정리)!
Arrays.asList() / List.of 자바에서 Array를 List으로 변환하기 위해서는 Arrays.asList(array)를 사용합니다. Java 9 버전 부터는 List.of(array)라는 새로운 팩토리 메소드를 도입했습니다. 차이점은 무엇일까요 ?
jaehoney.tistory.com
'개발 지식 > Java' 카테고리의 다른 글
[Java] 가변인자 (varargs) (0) 2023.11.15 [Java] 배열과 List 사이의 변환 (0) 2023.11.15 [Java] 정규표현식(Regular Expression, regex) (0) 2023.07.27 [Java] 인텔리제이 단축키 모음 (0) 2023.07.02 [Java] static, final 키워드를 class에 사용하는 경우 (0) 2023.06.18