Arrays.asList() vs Collections.singletonList()
Arrays.asList(something)를 Collections.singletonList(something)보다 사용하여 하나의 항목을 포함하는 목록을 만드는 데 이점(또는 큰 차이)이 있습니까?후자는 반환된 목록도 불변하게 만듭니다.
Collections.singletonList(something)
변치 않는 반면Arrays.asList(something)
고정 크기입니다.List
목록과 배열이 힙에 결합되는 배열의 표현입니다.
Arrays.asList(something)
에서는 비구조적인 변경이 허용되며, 이는 목록과 결합된 배열 모두에 반영됩니다.특정 인덱스에 대해 요소를 설정할 수 있지만 요소를 추가하거나 제거할 때 사용합니다.
반환된 목록에 대한 변경 사항Collections.singletonList(something)
이 됩니다.
또한 반환된 목록 용량:Collections.singletonList(something)
항상 1이 됩니다.Arrays.asList(something)
백업 어레이의 용량이 됩니다.
싱글톤 리스트는 배열에 의해 백업되는 것이 아니라 하나의 아이템에 대한 참조가 있을 뿐이라는 것을 덧붙입니다.메모리 사용량이 적고 작성하는 목록의 수에 따라 큰 영향을 미칠 수 있습니다.
방법Arrays.asList
지정된 배열에서 지원되는 고정 크기 목록을 반환합니다.메서드는 의 인스턴스를 반환합니다.ArrayList
이 클래스는 프라이빗네스트 스태틱클래스로 확장됩니다.AbstractList
가 아니라java.util.ArrayList
이 정적 클래스는 예를 들어 몇 가지 메서드를 구현합니다.set, indexOf, forEach, replaceAll
등입니다만, 기동할 때는add
그 자체의 실장은 없고 오히려 그 방법으로부터AbstractList
를 호출하여 를 슬로우합니다.java.lang.UnsupportedOperationException
.
그Collections.singletonList
는 지정된 오브젝트만 포함하는 불변의 목록을 반환하며 시리얼화도 가능합니다.
한편, 불변의 리스트에 대해서는, 통상,Collections.unmodifiableList
지정된 목록의 변경할 수 없는 보기를 반환합니다.
List<String> srcList = Arrays.asList("Apple", "Mango", "Banana");
var fruits = new ArrayList<>(srcList);
var unmodifiableList = Collections.unmodifiableList(fruits);
fruits.set(0, "Apricot");
var modFruit = unmodifiableList.get(0);
System.out.println(modFruit); // prints Apricot
수정할 수 없는 뷰 컬렉션은 수정할 수 없는 컬렉션이며 백업 컬렉션에 대한 보기이기도 합니다.백업 컬렉션에 대한 변경은 계속 가능하며 변경이 발생할 경우 수정할 수 없는 보기를 통해 볼 수 있습니다.
Java 10 이상에서는 진정한 불변의 리스트를 작성할 수 있습니다.수정할 수 없는 목록을 가져오려면 다음 두 가지 방법이 있습니다.
var unmodifiableList = List.copyOf(srcList);
var unmodifiableList = srcList.stream().collect(Collectors.toUnmodifiableList());
이 두 변수 중 하나를 사용하더라도 값은 여전히 "Apricot"이 아닌 "Apple"이 됩니다.
Java 10 문서에 따르면:
List.of
★★★★★★★★★★★★★★★★★」List.copyOf
할 수없는 을 쉽게 할 수 .static factory는 변경할 수 없습니다.이러한 방법으로 작성된 List 인스턴스에는 다음과 같은 특징이 있습니다.
- 수정할 수 없습니다.요소를 추가, 제거 또는 교체할 수 없습니다.리스트상의 임의의 돌연변이 메서드를 호출하면 항상 다음과 같은 원인이 됩니다.
UnsupportedOperationException
으로 나타날 수 .그러나 포함된 요소 자체가 변경 가능한 경우 목록 내용이 변경되는 것처럼 보일 수 있습니다.- elementsnull은 허용되지 .하려고 하면 null이 .
NullPointerException
.- 모든 요소를 직렬화할 수 있는 경우 직렬화할 수 있습니다.
- 목록의 요소 순서는 지정된 인수 또는 제공된 배열 요소의 순서와 동일합니다.
- 그들은 그렇다.
value-based
발신자는 반환된 인스턴스의 ID에 대해 추측하지 마십시오.공장에서는 새로운 인스턴스를 생성하거나 기존 인스턴스를 재사용할 수 있습니다.따라서 이러한 인스턴스(참조 등호화(==), ID 해시 코드 및 동기화)에 대한 ID에 민감한 작업은 신뢰할 수 없으므로 피해야 합니다.- [ Serialized Form ]페이지에 지정된 대로 시리얼화 됩니다.
언급URL : https://stackoverflow.com/questions/26027396/arrays-aslist-vs-collections-singletonlist
'programing' 카테고리의 다른 글
메이븐의 '폼' 패키지는 무엇입니까? (0) | 2022.08.15 |
---|---|
@EJB를 사용할지 @Inject를 사용할지 (0) | 2022.08.15 |
vue.select 2 다중 선택 (0) | 2022.08.08 |
Vuex 모듈에서 상속하는 방법 (0) | 2022.08.08 |
Vue 및 Vuex가 html에서 적절한 값을 취득하지 않음 (0) | 2022.08.08 |