[자바] Arrays.asList() 와 List.of()의 차이

Yoon Seo Jin·2024년 1월 18일
0

Java

목록 보기
5/7
post-thumbnail

Arrays.asList()

Arrays

java.util 패키지에 속한 클래스이다.
멤버 메소드가 모두 추상 메소드이므로 객체 생성 필요 없이 클래스명만으로도 사용 가능하다!

Arrays.asList()

객체 Array를 List로 변환해주는 메소드이다.
List가 argument 값으로 새로 생성(X) argument의 내용을 list 인터페이스로 단순 랩핑(O)
=> argument가 배열일 시 기존 주솟값 유지하므로 해당 배열이나 list 값 변경 시 동기화 (참조)

⚠️ 크기 조정이 불가하다.
⚠️ ArrayList 타입으로 반환하나, 이는 ArrayList 클래스의 객체가 아닌 Arrays의 내부 클래스이므로 add, remove가 구현되어 있지 않다. => set 메소드로 가능
∵ 참조로 동작 => 배열 값이 변경되면 list에 영향이 감

String[] arr = {"a", "b"};

List<String> l = Arrays.asList(arr);

//ArrayList의 객체로 받는 방법 -> 배열의 데이터와 독립됨
List<String> l = new ArrayList<String>(Arrays.asList(arr));

List.of()

List

java.util 패키지에서 제공하는 컬렉션 인터페이스 중 하나이다.

List.of()

인터페이스인 List가 객체 생성 및 요소 저장을 가능케 하는 메소드이다.
⚠️ ListN 타입으로 반환하는데, 이는 ImmutableCollections이므로 길이가 고정되며 요소 추가/삭제가 불가능하다.
∵ 값을 기반으로 독립적 개체를 만들므로 reference 미발생
⚠️ Null을 비허용한다. (내부적으로 파라미터들에 대해 null 체크 후 반환)
=> 반환된 객체에 null로 contains() 메소드를 실행할 경우 NullPointerException이 발생한다.

  • Arrays.asList() 보다 메모리를 더 적게 사용하므로, Array를 다른 컬렉션으로 변환할 때 사용하기 적합하다.

비교 표

Arrays.asList()List.of()
반환 타입ArrayList 타입ListN 타입
요소의 변경 가능 여부(mutability)OX
Null 허용 여부OX
참조 발생 여부OX
메모리 사용량상대적으로 힙에 개체를 더 많이 생성함->오버헤드 공간 차지
용도변경이 있으나 고정 크기일 시변경이 불필요한 오로지 값의 목록 사용 시(데이터 무결성 보장, 수정 방지)

출처

Hyuk 님의 네이버 블로그 「List.of() vs Arrays.asList()」
Grey Kim 님의 네이버 블로그 「[Java] Arrays.asList, List.of 차이」
JaeHoney 님의 티스토리 「Java - Arrays.asList vs List.of 차이 (완벽 정리)!」
Phizzy 님의 네이버 블로그「[JAVA] List를 만드는 방법, Arrays.asList /List.of /Collections.singletonList의 차이점」
minjara 님의 네이버 블로그 「[JAVA] Arrays.asList()」

profile
this blog is synchronized w/ notion; currently not accessible

0개의 댓글