ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Collections.singletonList emptyList
    Java 2022. 6. 8. 18:40
    반응형

    안녕하세요.

     

    오늘은 java.util.Collections 프레임워크 중 singletonList, emptyList에 대해서 알아보겠습니다.

     

    List<Integer> list = Arrays.asList(1);

     

     

    IntelliJ에서 위와 같은 코드를 작성하고 Inspect Code를 해보면 다음과 같은 warning을 알려줍니다.

     

    Reports any calls to Arrays.asList() with zero arguments or only one argument. 
    Such calls could be replaced with either a call to Collections.singletonList() or Collections.emptyList() 
    which will save some memory.
    Note: the list returned by Collections.singletonList() is immutable, 
    while the list returned Arrays.asList() allows calling the set() method. 
    This may break the code in rare cases.

     

    Arrays.asList()를 쓸때 arguments가 0이나 1인 경우에는 Collections.singletonList() 이나 Collections.emptyList() 를 쓰라고 알려줍니다.

    이유는 메모리를 적게 사용해서 그렇습니다. 

    singletonList나 emptyList는 immutable이고 리스트의 변경이 불가하고 Arrays.asList()는 리스트의 변경이 가능해서 메모리를 더 사용하게 됩니다.

     

     

     

    Collections.emptyList()

     

    빈 리스트를 생성하고 싶을 때 사용합니다. 

    Collections.emptyList() 를 사용하고 Collections.EMPTY_LIST 도 사용 가능합니다.

    emptyList()는 실제 코드를 보면 EMPTY_LIST를 return하고 있습니다.

     

    public static final <T> List<T> emptyList() {
    	return (List<T>) EMPTY_LIST;
    }

     

    아래 코드에서 list2.add를 하면 list2는 immutable이기 때문에 java.lang.UnsupportedOperationException이 발생합니다.

     

    List<String> list1 = Collections.EMPTY_LIST;
    List<String> list2 = Collections.emptyList();
    list2.add("bb"); // UnsupportedOperationException 발생

     

     

    Collections.singletonList()

     

    리스트의 요소가 1개인 불변의 리스트를 생성할 경우에 사용합니다.

     

    List<String> list = Collections.singletonList("aa");
    list.add("bb"); // UnsupportedOperationException 발생

     

    이 경우에도 list.add, delete 할 경우 UnsupportedOperationException이 발생합니다.

    불변하는 리스트이기 때문에 메모리를 아낄 수 있습니다.

    반응형

    'Java' 카테고리의 다른 글

    Java - stream filter 사용법  (0) 2022.06.08
    Java - 불변(Immutable) 리스트 생성  (0) 2022.06.08
    Java - Calendar 클래스로 날짜, 시간, 요일 구하기  (0) 2022.06.08
    Java - method rule  (0) 2022.05.31
    Java - 싱글턴(Singleton) 패턴  (0) 2022.05.30

    댓글

Designed by Tistory.