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 |