Arrays.asList 와 List.of를 사용할 일은 많이 없지만 종종 생각날때가 있다.
ArrayList를 사용해야 할때 쓸까...하다가 여러이유로 안쓰게되는데 이 두가지 리스트에 대해 이 기회에 정리를 좀 해보고자한다.
자바에서 리스트를 만드는 방법
- 생성자로 직접 리스트 객체를 인스턴스화
- Arrays.List() - 배열을 리스트로 변환하는 메소드
- List.of() - List 인터페이스의 디폴트 메소드인 정적 팩토리 메소드
Arrays.asList 와 List.of 차이
- 리스트 변경 가능 여부
-
메소드를 통해 리스트를 만들 경우 반환되는 리스트들은 불변 리스트이므로 요소를 리스트에 추가,삭제가 불가능하다
-
Arrays.asList는 변경이 가능하기 때문에 Thread-Safe 하지 않고, List.of는 완전 불변하기 때문에 쓰레드에 안전하다.
| 원소 추가/삭제 | set사용 |
|---|
| new ArrayList() | O | O |
| Arrays.asList() | X | O |
| List.of() | X | X |
- Arrays.asList의 반환 리스트는 java.util.ArrayList가 아니다.
Arrays.asList를 까보면 컬렉션 프레임워크 클래스가 아닌 Arrays클래스 내부에 있는 static inner class 이므로 완전 다른놈이다.


- List.of의 반환 리스트도 ArrayList가 아니다.
까보면 ImmutableCollections 객체의 내부 클래스인 List12 객체를 생성하는 것을 볼 수 있다

- 리스트 내부 배열 참조 여부
- Arrays.asList()는 참초한 원본 배열의 값이 바뀌면 리스트의 값도 바뀌고, 반대로 List의 값을 수정해도 원본 배열의 값도 바뀐다.
- List.of()는 참조한 원본 배열의 값이 바뀌어도 리스트의 값은 바뀌지 않는다.
- Null 값을 가질 수 있는지 여부
- Arrays.asList()는 원소에 NUll을 가질 수 있다.
- List.of()는 원소에 Null을 가질 수 없다.
정리가 잘 된 글이네요. 도움이 됐습니다.