목록을 초기화하는 방법 자바의 객체?
다음 코드와 같이 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>();
대부분의 경우 간단한 ArrayList
구현을 원합니다.List
JDK 버전 7 이전
List<String> list = new ArrayList<String>();
JDK 7 이상에서는 다이아몬드 연산자를 사용할 수 있습니다
List<String> list = new ArrayList<>();
자세한 내용은 여기 Oracle 설명서-컬렉션에 기록되어 있습니다.
List는 인터페이스 일 뿐이며 일부 일반 목록의 정의입니다. 이 목록 인터페이스의 구현을 제공해야합니다. 가장 일반적인 두 가지는 :
ArrayList- 배열에 구현 된 목록
List<String> supplierNames = new ArrayList<String>();
LinkedList- 상호 연결된 요소 체인처럼 구현 된 목록
List<String> supplierNames = new LinkedList<String>();
사용하려는 List의 종류에 따라
List<String> supplierNames = new ArrayList<String>();
당신이 갈 수 있어야합니다.
List는 인터페이스이고 ArrayList는 List 인터페이스의 한 구현입니다. JavaDocs of List 인터페이스를 읽으면 더 적합한 구현을 찾을 수 있습니다 .
당신은 단지 만들려면 불변 List<T>
만에 하나 그 안에 오브젝트를,이 API를 사용할 수 있습니다 :
List<String> oneObjectList = Collections.singletonList("theOnlyObject”);
추가 정보 : 문서
List는 인터페이스입니다. List를 사용하여 초기화 할 수 없습니다.
List<String> supplierNames = new ArrayList<String>();
이것들은 List 요소가없는 클래스 중 일부입니다.
ArrayList, LinkedList, Vector
요구 사항에 따라이 중 하나를 사용할 수 있습니다. 이러한 각 클래스에는 고유 한 기능이 있습니다.
만일을 대비하여이 질문에 여전히 남아있는 사람이 있습니다. 나는 한두 명의 새로운 사용자가 다시 같은 질문을하고 모든 사람들이 다음과 같이 말하는 것을 보았 기 때문에, 아니오, 당신은 그렇게 할 수 없습니다, Dear Prudence , 여기에 주어진 모든 대답을 제외하고, 나는 추가 정보를 제공하고 싶습니다-실제로 do, list list = new List (); 그러나 인터페이스의 모든 메소드의 구현을 작성하는 비용이 듭니다. 이 개념은 단순히 List list = new List ()가 아닙니다. 그러나
List<Integer> list = new List<Integer>(){
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean contains(Object o) {
// TODO Auto-generated method stub
return false;
}
..... 등 (모든 방법을 쓸 수 있습니다.)
이것은 익명 클래스 의 예입니다 . 누군가 가`` 아니요, 인터페이스를 인스턴스화 할 수 없습니다 ''라고 말하면 정확합니다. 그러나 당신은 결코 말할 수 없습니다. 당신은 CANT write List list = new List (); 하지만, 분명 당신은 그렇게 할 수 그것은 만들 수있는 하드 문입니다 당신은 할 수 없어 .
우리가 만든 소유즈-에 1 문제를 단순화하기 위해 : 변환하는 방법 X
에 Y
(예 String
에 Integer
). 그것을 구성하는 간단한 기능을 갖도록 종류의 변환과 같은 물체의 구축되고 Map
, List
, Set
:
import io.thedocs.soyuz.to;
List<String> names = to.list("John", "Fedor");
확인하십시오-다른 유용한 기능이 많이 있습니다
참고 URL : https://stackoverflow.com/questions/13395114/how-to-initialize-liststring-object-in-java
'Programing' 카테고리의 다른 글
프로세스 종료 코드를 기반으로 종료 쉘 스크립트 (0) | 2020.02.27 |
---|---|
NumPy에서 CSV 데이터를 레코드 배열로 읽는 방법은 무엇입니까? (0) | 2020.02.27 |
Ruby : 연결없이 여러 줄로 된 문자열을 쓸 수 있습니까? (0) | 2020.02.27 |
iPhone은 첫 페이지에서만 탐색 모음을 숨 깁니다. (0) | 2020.02.27 |
서포트 벡터 머신에 비해 인공 신경망의 장점은 무엇입니까? (0) | 2020.02.27 |