ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Arrays.asList vs new ArrayList
    카테고리 없음 2022. 9. 7. 08:00
    반응형

    자바

    java에서 리스트로 만들 때 자주 사용하는 Arrays.asList() 

    아래와 같이 사용할 수 있다.

        @Test
        void asListTest(){
            List<String> list = Arrays.asList("test1", "test2", "test3");
    
            // todo
    
            list.forEach(System.out::println);
        }

    출력은 기대한 것과 같이 3개의 문자열을 출력한다.

    출력 결과 1

     

    여기서 list에 하나의 문자열을 추가해보면 기대와는 다른 결과를 확인할 수 있다.

        @Test
        void asListTest(){
            List<String> list = Arrays.asList("test1", "test2", "test3");
            
            list.add("test4");
    
            list.forEach(System.out::println);
        }

    실행을 하면 아래와 같은 에러를 확인할 수 있다.(UnsupportedOperationException)

    출력 결과 2

     

    여기서 Arrays.asList의 설명을 보면 아래와 같이 기술되어 있다.

    /**
     * Returns a fixed-size list backed by the specified array.
     * ...
     */
    @SafeVarargs
    @SuppressWarnings("varargs")
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

    고정된 크기의 리스트를 반환한다고 되어 있다.

    그리고 반환하는 new ArrayList<>(a)를 따라가 보면 Arrays 클래스 내부에 구현된 ArrayList를 볼 수 있다.

    Arrays 내부의 ArrayList

    그리고 해당 ArrayList에는 add()가 구현되어 있지 않아서 UnsupportedOperationException을 발생시킨다.

     

    다음으로 List를 new ArrayList<>() 로 생성한 뒤 따라가 보면 ArrayList 클래스로 도착한다.

    List<String> arrayList = new ArrayList<>();

    ArrayList 클래스

     

    결국 List라는 형태를 반환하지만, 서로 다른 동작을 하기 때문에 용도에 맞춰 사용을 해야 한다.

     

    - 위 작성된 글에는 잘못된 부분이 있을 수 있습니다. 알려주시면 수정하겠습니다.

    ※ info
    IDE : IntelliJ IDEA 2022.2 (Ultimate Edition)
    Java : openjdk 11
    OS : Windows 10 Pro
    반응형

    댓글

Designed by Tistory.