TIL

TIL - List.of()와 Arrays.asList()

김뚜루 2023. 3. 21. 20:17

MySQL Lv.1 클리어! + 순위 10000위 이내로 안착!

최근 SQL 공부를 시작하고 프로그래머스에서 쫌쫌따리로 MySQL lv1. 문제를 풀고 있다.

그리고 윗 사진은 쫌쫌따리의 결과!

비록 lv1. 이지만 lv2. 클리어도 빠른 시일 내에 될거라고 생각한다. 

 

List.of() 그리고 Arrays.asList()

테스트 코드 작성 중 메서드 파라미터가 List인 경우에 List.of()를 사용해 파라미터에 넣어주는 테스트를 돌리곤 한다.

그러다 가끔 List 요소를 수정하거나 추가 혹은 삭제를 하는 경우에 UnsupportedOperationException이 발생하는데, 

이를 new ArrayList()로 변경하거나 Arrays.asList()로 변경하면 해결이 되었었다. 

오늘도 같은 문제가 발생해 시간도 많고 정리도 할겸 이유를 찾아보았다. 

이유는 아래와 같다. 

Arrays.asList() 와 List.of()의 차이점

Arrays.asList()와 List.of()는 자바에서 리스트를 생성하는 두 가지 다른 방법이다. 두 메서드의 주요 차이점은 아래와 같다.

  1. 가변성
  • Arrays.asList()는 가변적인 리스트를 반환한다. 리스트의 요소를 변경할 수 있다. 하지만 리스트의 크기를 변경할 수 없다.
  • 고정된 크기의 리스트를 반환하는 이유는 내부족으로 주어진 배열을 래핑하며, 배열의 크기는 변경할 수 없기 떄문에 그러하다.
  • 반면 List.of()는 불변 리스트를 반환한다. 반환된 리스트의 요소를 변경할 수 없고, 리스트의 크기도 변경할 수 없다.
  1. 내부 구현
  • Arrays.asList() 는 내부적으로 배열을 사용해 리스트를 구현한다. 이로 인해 반환된 리스트의 성능은 배열과 유사하다 Array와 LinkedList
  1. null 요소
  • Arrays.asList()는 리스트 내에 null 요소를 허용한다
  • List.of()는 null을 허용하지 않는다
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

public boolean add(E e) {
    throw new UnsupportedOperationException();
}