IT

Arrays.asList () 대 Collections.singletonList ()

lottoking 2020. 7. 13. 07:47
반응형

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는 지정된 배열이 지원하는 고정 크기 목록을 리턴합니다. 상기 방법의 일 예를 리턴 ArrayListA는 어느 개인 중첩 정적 클래스 연장 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 이상 에서 진정한 불변 목록을받을 수 있습니다 . 진정한 수정 불가능한 목록 을 얻는 방법에는 두 가지가 있습니다 .

  1. var unmodifiableList = List.copyOf(srcList); => 사과를 인쇄합니다
  2. var unmodifiableList = srcList.stream().collect(Collectors.toUnmodifiableList()); => 사과를 인쇄합니다

Java 10 doc따르면 :

List.ofList.copyOf정적 팩토리 메소드는 변경 불가능한 목록을 만들 수있는 편리한 방법을 제공합니다. 이 메소드로 보관 목록 인스턴스는 다음과 같은 특징이 있습니다.

  1. 그들은 그들이 수 없습니다 . 요소를 추가, 제거 또는 교체 할 수 없습니다. List에서 mutator 메소드를 호출하면 항상 발생 UnsupportedOperationException합니다. 그러나 포함 된 요소 자체가 변경 가능한 경우 목록의 내용이 변경 될 수 있습니다.
  2. 그들은 null 요소를 허용하지 않습니다. 널 요소를 사용하여 작성하면 결과가 발생 NullPointerException합니다.
  3. 모든 요소가 생성 될 수 있습니다.
  4. 배열의 순서는 배열의 순서와 배열의 순서는 배열의 순서는 배열입니다.
  5. 그들입니다 value-based. 호출자는 반환 된 인스턴스의 아이덴티티에 대해 가정합니다. 새로운 인스턴스를 생성하거나 기존 인스턴스를 추가 할 수 있습니다. 따라서 반드시 인스턴스에서 ID에 민감한 작업 (참조 동등성 (==), ID 해시 코드 및 동기화)이 필요합니다.
  6. 내장 화 된 양식 페이지 에 내장대로 화 입니다.

참고 URL : https://stackoverflow.com/questions/26027396/arrays-aslist-vs-collections-singletonlist

반응형