[java] Java에서 List <String> 객체를 초기화하는 방법은 무엇입니까?

다음 코드와 같이 List를 초기화 할 수 없습니다.

List<String> supplierNames = new List<String>();
supplierNames.add("sup1");
supplierNames.add("sup2");
supplierNames.add("sup3");
System.out.println(supplierNames.get(1));

다음과 같은 오류가 발생합니다.

유형을 인스턴스화 할 수 없습니다 List<String>

어떻게 인스턴스화 할 수 List<String>있습니까?



답변

API 를 확인하면 다음과 List같이 표시됩니다.

Interface List<E>

interface이 인스턴스화 할 수없는 수단을 (더 new List()불가능하다).

해당 링크를 확인하면 다음 class을 구현 하는 es가 있습니다 List.

알려진 모든 구현 클래스 :

AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack,Vector

그것들은 인스턴스화 될 수 있습니다. 그들의 링크를 사용하여 그들에 대해 더 많이 알 수 있습니다.

가장 일반적으로 사용되는 3 가지는 다음과 같습니다.

 List<String> supplierNames1 = new ArrayList<String>();
 List<String> supplierNames2 = new LinkedList<String>();
 List<String> supplierNames3 = new Vector<String>();

보너스 : 다음과 같이를
사용하여보다 쉬운 방법으로 값으로 인스턴스화 할 수도 Arrays class있습니다.

List<String> supplierNames = Arrays.asList("sup1", "sup2", "sup3");
System.out.println(supplierNames.get(1));

그러나 목록에 더 많은 요소를 추가 할 수 없습니다 fixed-size.


답변

인터페이스를 인스턴스화 할 수 없지만 구현이 거의 없습니다.

JDK2

List<String> list = Arrays.asList("one", "two", "three");

JDK7

//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");

JDK8

List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());

JDK9

// creates immutable lists, so you can't modify such list 
List<String> immutableList = List.of("one", "two", "three");

// if we want mutable list we can copy content of immutable list 
// to mutable one for instance via copy-constructor (which creates shallow copy)
List<String> mutableList = new ArrayList<>(List.of("one", "two", "three"));

또한 Guava 와 같은 다른 라이브러리에서 제공하는 다른 많은 방법이 있습니다.

List<String> list = Lists.newArrayList("one", "two", "three");


답변

List는 Interface 이며 인터페이스는 규칙이므로 클래스에 어떤 메소드가 있어야하는지 인터페이스를 인스턴스화 할 수 없습니다. 인스턴스화하려면 해당 인터페이스의 구현 (구현)이 필요합니다. 매우 인기있는 List 인터페이스 구현으로 아래 코드를 사용해보십시오.

List<String> supplierNames = new ArrayList<String>(); 

또는

List<String> supplierNames = new LinkedList<String>();


답변

당신은 ArrayList<String>등 을 사용해야 합니다.

List<String> 인터페이스입니다.

이것을 사용하십시오 :

import java.util.ArrayList;

...

List<String> supplierNames = new ArrayList<String>();


답변

List는 인터페이스이므로 인터페이스를 초기화 할 수 없습니다. 대신 구현 클래스를 인스턴스화하십시오.

처럼:

List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();


답변

List는 인터페이스 일 뿐이며 일부 일반 목록의 정의입니다. 이 목록 인터페이스의 구현을 제공해야합니다. 가장 일반적인 두 가지는 :

ArrayList- 배열에 구현 된 목록

List<String> supplierNames = new ArrayList<String>();

LinkedList- 상호 연결된 요소 체인처럼 구현 된 목록

List<String> supplierNames = new LinkedList<String>();


답변

대부분의 경우 간단한 ArrayList구현을 원합니다.List

JDK 버전 7 이전

List<String> list = new ArrayList<String>();

JDK 7 이상에서는 다이아몬드 연산자를 사용할 수 있습니다

List<String> list = new ArrayList<>();

자세한 내용은 여기 Oracle 설명서-컬렉션에수록되어 있습니다.