본문 바로가기
자바

코자개 - 정렬

by BIGENGINEER 2025. 4. 28.

Arrays.asList() vs new ArrayList<>(Arrays.asList()) 차이

 

- 정렬 문제를 풀면서 새롭게 알게된 것들을 정리해보려고 한다.

 

 

 

1) Arrays.asList()

- 배열 기반 리스트로 배열을 리스트처럼 잠깐 다루고 싶을 때 사용한다.

- 즉, 진짜 리스트가 아니라, 배열을 감싼 껍데기 인 것이다. 

- 내부적으로 배열을 참조하는 껍데기 객체를 만든다.

 

배열(arr)  ----> [ "aaa", "bbb", "ccc" ]
                 ↑
                Arrays.asList() 리스트 (배열을 가리키기만 함)

 

-> 위 구조처럼  배열을 가리키기만 할 뿐 크기를 바꾸지 못해서 add()나 remove()는 하지 못한다.

 

 

 

String[] arr = {"a", "b", "c"};
List<String> list = Arrays.asList(arr);

list.add("d"); // ❌ 에러 발생!

 

결과 : UnsupportedOperationException

 

 

 

**주의

- 단, 값 수정은 가능하다. 

- > 아래에서 예시로 들어주겠다. 

 

 

2) new ArrayList<>(Arrays.asList())

- 배열을 복사해서 새 리스트를 만드는 것으로 진짜 arrayList처럼 자유롭게 추가/삭제/정렬하고 싶을 때 사용한다.

- 즉, 내부에서 새로운 배열을 만들어서 원소를 저장하기 때문에 크기 변경이 자유롭게 가능하다.

 

 

배열(arr)  ----> [ "aaa", "bbb", "ccc" ]
 
(new) ArrayList  ----> [ "aaa", "bbb", "ccc" ] ← 복사본 (자유롭게 추가/삭제 가능)

 

 

 

 

예시 문제

import java.util.*;

public class Test {
    public static void main(String[] args) {
        String[] arr = {"apple", "banana", "cherry"};

        List<String> list1 = Arrays.asList(arr);
        List<String> list2 = new ArrayList<>(Arrays.asList(arr));

        list1.set(0, "grape"); // (1)
        list2.add("orange");   // (2)

        System.out.println(Arrays.toString(arr)); // (3)
        System.out.println(list1); // (4)
        System.out.println(list2); // (5)
    }
}

 

1) 0 번의 apple이 grape로 바뀌어서 grape, banana, cherry가 된다.

-> 이때 주목해야할 점은 !!!!!!!!!!!!!!!! Arrays.asList()는 set으로 값 수정이 가능하다는 것이다. 

 

2) grape, banana, cherry, orange

 

3)  grape, banana, cherry

-> arr 배열은 list1과 공유하고 있어서 list1의 배열이 출력되는 것이다.

 

4) grape, banana, cherry

 

5) grape, banana, cherry, orange

 

 

 

즉, Arrays.asList()는 값 변경은 가능, 크기 변경은 불가능하고

new ArrayList<>(Arrays.asList())는 모든 변경 가능하다.

'자바' 카테고리의 다른 글

코자개 - Hash  (1) 2025.04.11
자바 정처기 실기 대비  (1) 2025.04.07
코자개1. [ ==와 equals() ]  (0) 2025.04.03
java 복습 3  (0) 2024.01.14
java 복습 2  (0) 2024.01.14