반응형
Arrays의 asList
java8 API 문서에 보면 아래와 같이 나와 있습니다.
- 고정된 배열을 반환한다.
- 읽기 전용 배열을 반환한다
그래서 어떻게 사용하는 걸까?
아래와 같이 두 가지 방법으로 사용이 가능 합니다.
어떤 특징이 있을까?
add, remove가 불가능하다(읽기 전용).
AstractList 라는 추상 클래스의 add, remove를 상속받아 사용합니다.
아래 소스를 보면 불가능한 이유를 알 수 있습니다.UnsupportedOperationException
를 예외로 던지기 때문 입니다.
변경은 가능하다.
AbstractList 에서 set 메서드는 add, remove와 동일한 예외를 발생 시키지만, AbstractList 를 상속받아 set 메서드를 오버라이드 하기 때문에 변경이 가능합니다.
그렇기 때문에 불변이라고 볼 수 없습니다.기준이 되는 배열의 주소를 공유한다
주소를 공유하기 때문에 ArrayList의 값을 set하여 변경하면, 배열의 값도 변경 됩니다.
주소를 공유하는 이유는 asList 메서드에서new ArrayList<>(a)
를 사용하여 그대로 값을 넘기기 때문입니다.
각각의 주소를 가지고 싶다면List<Integer> integers = new ArrayList<>(Arrays.asList(arrInteger));
와 같이 생성 해주면 됩니다.
편리하다.
- 배열을 ArrayList처럼 기능을 어느 정도 사용할 수 있는 편리함
- Collection 클래스 중 예를 들면 add()를 남발할 필요가 없습니다.
정리
특징
- ArrayList로 배열을 쉽게 생성할 수 있다.
- Collection 클래스의 데이터 생성 시 코드 양을 줄일 수 있다. 케바지만 가독성도 개수가 적다면 더 좋아 보인다.
- ArrayList의 add, remove를 사용하는 것이 아닌 AbstractList의 add, remove를 상속 받기 때문에 add, remove 불가
- 읽기 전용이다. 하지만 set을 제공하기 때문에 불변이 아니다.
- 기존 배열과 주소를 공유한다.
반응형
'Java' 카테고리의 다른 글
인터페이스로 객체지향스럽게 다형성을 이용하여 중복 제거 하기 (0) | 2021.10.14 |
---|---|
JVM 동작 원리 (0) | 2021.10.11 |
hashCode와 toString (0) | 2021.10.05 |
Java로 자료구조 이해하기 3편(Stack과 Queue) (0) | 2021.10.02 |
Java로 자료구조 이해하기 2편(Arraylist와 LinkedList) (0) | 2021.10.02 |