Development Tip

Lists.newArrayList 대 새 ArrayList

yourdevel 2020. 11. 7. 10:38
반응형

Lists.newArrayList 대 새 ArrayList


ListStrings 를 만들기위한 가장 좋은 구성은 무엇입니까 ? 그것은이다 Lists.newArrayList()(구아바에서) 또는 new ArrayList()?

그것은 단지 개인적인 취향입니까?
아니면 유형 제네릭 유형 추론입니까?
또는 Lists.newArrayList () 사용에 대한 이론적 또는 실제적 가치가 있습니까?


구아바 빌더는 유형 인수를 여러 번 입력하는 것을 저장합니다. 비교:

List<Foo<Bar, Baz>> list = Lists.newArrayList();
List<Foo<Bar, Baz>> list = new ArrayList<Foo<Bar, Baz>>();

Java 7에서는 다이아몬드 연산자가 있기 때문에 약간 구식입니다.

List<Foo<Bar, Baz>> list = new ArrayList<>();

에서 구아바의 소스 :

public static <E> ArrayList<E> newArrayList() {
    return new ArrayList<E>();
}

수행하는 모든 작업은 유형 추론을 허용하는 것입니다. 런타임에는 차이가 없습니다.


한 점을 추가 하면 Lists.newArrayList ()의 오버로드 버전이 더 유용합니다.

  • Lists.newArrayList(E... elements)
  • Lists.newArrayList(Iterable<? extends E> elements)
  • Lists.newArrayList(Iterator<? extends E> elements)

보다 유용한 기능을 제공합니다 new ArrayList().

예 : new ArrayList()할 수 없음 :

Lists.newArrayList("a","b");
Lists.newArrayList(anIterable);

이것이 Lists.newArrayList가하는 일입니다 :

@GwtCompatible(serializable = true)
public static <E> ArrayList<E> newArrayList() {
    return new ArrayList<E>();
}

따라서이 두 가지는 기본적으로 동일하며 newArrayList를 사용하면 제네릭 유형을 복제 할 필요가 없다는 이점이 있습니다. 이것은 복잡한 제네릭에 매우 유용합니다.

List<Map<X,List<Y>> list = new ArrayList<Map<X,List<Y>>();

List<Map<X,List<Y>> list = Lists.newArrayList();

여기설명 된대로 Lists, Sets을 사용하는 주된 동기는 코드의 가독성 / 중복 및 유형 추론을 개선하는 것입니다.


오버로드 된 생성자를위한 Java 8 접근 방식.

Guava에서 오버로드 된 생성자를 사용하려면 Java 8 Stream Builder를 사용하는 다른 방법을 권장합니다.

List<String> listTest = Stream.<String>builder.add("Hello").add("My Name").add("Blah").build().collect(Collectors.toList());

앞서 언급했듯이 Java 7은 이것을 쓸모 없게 만들지 만, 나중에 목록, 집합,지도 등의 유형을 더 쉽게 변경할 수 있기 때문에 팩토리 메서드를 사용합니다.

참고 URL : https://stackoverflow.com/questions/9980915/lists-newarraylist-vs-new-arraylist

반응형