답변:
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
.
ArrayList
경우new ArrayList<>(Arrays.asList("sup1", "sup2", "sup3"))
인터페이스를 인스턴스화 할 수 없지만 구현이 거의 없습니다.
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");
당신은 ArrayList<String>
등 을 사용해야 합니다.
List<String>
인터페이스입니다.
이것을 사용하십시오 :
import java.util.ArrayList;
...
List<String> supplierNames = new ArrayList<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 설명서-컬렉션에수록되어 있습니다.
사용하려는 List의 종류에 따라
List<String> supplierNames = new ArrayList<String>();
당신이 갈 수 있어야합니다.
List는 인터페이스이고 ArrayList는 List 인터페이스의 한 구현입니다. JavaDocs of List 인터페이스를 읽으면 더 적합한 구현을 찾을 수 있습니다 .
List는 인터페이스입니다. List를 사용하여 초기화 할 수 없습니다.
List<String> supplierNames = new ArrayList<String>();
이것들은 List 요소가없는 클래스 중 일부입니다.
ArrayList, LinkedList, Vector
요구 사항에 따라이 중 하나를 사용할 수 있습니다. 이러한 각 클래스에는 고유 한 기능이 있습니다.
만일을 대비하여 여전히이 질문 주위에 남아있는 사람이 있습니다. , 내가 하나 또는 두 개의 새로운 사용자가 다시 같은 질문을 모든 사람들이 다음 이야기를 볼 수 있기 때문에, 아니 당신은 할 수 없어, 친애하는 신중함이 예를 실제로 할 수 - 외에도 여기에 주어진 모든 대답에서, 나는 추가 정보를 제공하고 싶습니다 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 (); 하지만, 분명 당신은 그렇게 할 수 그것은 만들 수있는 하드 문입니다 당신은 할 수 없어 .
List
. 오히려 이름이없고 구현하는 새 클래스를 선언하고 List
런타임에 새로 선언 된 클래스의 새 객체를 만듭니다.
우리가 만든 소유즈-에 1 문제를 단순화하기 위해 : 변환하는 방법 X
에 Y
(예 String
에 Integer
). 그것을 구성하는 간단한 기능을 갖도록 종류의 변환과 같은 물체의 구축되고 Map
, List
, Set
:
import io.thedocs.soyuz.to;
List<String> names = to.list("John", "Fedor");
확인하십시오-다른 유용한 기능이 많이 있습니다
int[] a = {1,2,3}; System.out.println(Arrays.asList(a)); // [[I@70cdd2]