Arrays.asList () 대 Collections.singletonList ()
Collections.singletonList (something)보다 Arrays.asList (something)을 사용하여 하나의 항목을 포함하는 것 (또는 많은 차이)이 있습니까? 후자는 반환 된 목록도 설명 할 수 없습니다.
Collections.singletonList(something)
인 불변 반면 Arrays.asList(something)
고정 크기 인 List
리스트와 어레이가 힙 접합 도착 어레이의 표현.
Arrays.asList(something)
구조가 아닌 변경을 허용 하여 목록 및 결합 된 배열 모두에 반영됩니다. 강화할 수 있습니다.UnsupportedOperationException
에 의해 리턴 된 List에 대한 변경 사항은 Collections.singletonList(something)
귀결 입니다.UnsupportedOperationException
또한, 반환되는 목록 의 용량은 백업 된 어레이의 용량 과는 달리 Collections.singletonList(something)
항상 1Arrays.asList(something)
입니다.
나는 싱글 톤리스트가 배열에 의해 지원되지 않고 그 한 항목에 대한 참조 만 가지고있는 일 것입니다. 아마도 메모리를 덜 차지하고 만들려는 목록 수에 따라 중요 할 수 있습니다.
이 메소드 Arrays.asList
는 지정된 배열이 지원하는 고정 크기 목록을 리턴합니다. 상기 방법의 일 예를 리턴 ArrayList
A는 어느 개인 중첩 정적 클래스 연장 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());
=> 사과를 인쇄합니다
Java 10 doc 에 따르면 :
List.of
및List.copyOf
정적 팩토리 메소드는 변경 불가능한 목록을 만들 수있는 편리한 방법을 제공합니다. 이 메소드로 보관 목록 인스턴스는 다음과 같은 특징이 있습니다.
- 그들은 그들이 수 없습니다 . 요소를 추가, 제거 또는 교체 할 수 없습니다. List에서 mutator 메소드를 호출하면 항상 발생
UnsupportedOperationException
합니다. 그러나 포함 된 요소 자체가 변경 가능한 경우 목록의 내용이 변경 될 수 있습니다.- 그들은 null 요소를 허용하지 않습니다. 널 요소를 사용하여 작성하면 결과가 발생
NullPointerException
합니다.- 모든 요소가 생성 될 수 있습니다.
- 배열의 순서는 배열의 순서와 배열의 순서는 배열의 순서는 배열입니다.
- 그들입니다
value-based
. 호출자는 반환 된 인스턴스의 아이덴티티에 대해 가정합니다. 새로운 인스턴스를 생성하거나 기존 인스턴스를 추가 할 수 있습니다. 따라서 반드시 인스턴스에서 ID에 민감한 작업 (참조 동등성 (==), ID 해시 코드 및 동기화)이 필요합니다.- 내장 화 된 양식 페이지 에 내장대로 화 입니다.
참고 URL : https://stackoverflow.com/questions/26027396/arrays-aslist-vs-collections-singletonlist
'IT' 카테고리의 다른 글
스칼라에서`#`연산자는 무엇을 의미합니까? (0) | 2020.07.13 |
---|---|
로컬 변경 사항을 유지하는 git pull (0) | 2020.07.13 |
왜 우리는 추상 팩토리 디자인 패턴이 필요합니까? (0) | 2020.07.13 |
C #에서 바이트 []에서 IntPtr을 얻는 방법 (0) | 2020.07.12 |
Android ActionBar 뒤로 버튼을 구현하는 방법은 무엇입니까? (0) | 2020.07.12 |