如何在Java中初始化List <String>对象?

ahm*_*l88 376 java list

我无法初始化List,如下面的代码所示:

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

我面临以下错误:

无法实例化该类型 List<String>

我该如何实例化List<String>

J.A*_*.L. 700

如果您检查API,List您会注意到它说:

Interface List<E>
Run Code Online (Sandbox Code Playgroud)

作为一种interface手段,它无法实例化(new List()不可能).

如果你检查那个链接,你会发现一些class实现的东西List:

所有已知的实现类:

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

那些可以实例化.使用他们的链接了解更多关于他们的知识,IE:了解哪种更适合您的需求.

最常用的3种可能是:

 List<String> supplierNames1 = new ArrayList<String>();
 List<String> supplierNames2 = new LinkedList<String>();
 List<String> supplierNames3 = new Vector<String>();
Run Code Online (Sandbox Code Playgroud)

额外奖励:
您还可以使用更简单的方式使用值实例化它Arrays class,如下所示:

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

但请注意,您不能将更多元素添加到该列表中,因为它是fixed-size.

  • 如果您需要将结果列表设为“ ArrayList”,请使用“ new ArrayList &lt;&gt;(Arrays.asList(“ sup1”,“ sup2”,“ sup3”))) (3认同)
  • @Christoffer Hammarström 要打印列表或数组,您可以使用 java.util.Arrays.toString(array);,因此已经给出了此功能。 (2认同)

Laz*_*ana 94

无法实例化接口,但实现很少:

JDK2

List<String> list = Arrays.asList("one", "two", "three");
Run Code Online (Sandbox Code Playgroud)

JDK7

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

JDK8

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

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"));
Run Code Online (Sandbox Code Playgroud)

此外,还有许多其他库提供的其他方式,如番石榴.

List<String> list = Lists.newArrayList("one", "two", "three");
Run Code Online (Sandbox Code Playgroud)


Dos*_*eke 37

List是一个接口,你不能实例化一个接口,因为接口是一个约定,你的类应该有哪些方法.为了实例化,您需要该接口的一些实现(实现).使用非常流行的List接口实现尝试以下代码:

List<String> supplierNames = new ArrayList<String>(); 
Run Code Online (Sandbox Code Playgroud)

要么

List<String> supplierNames = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)


Ofi*_*chy 14

您将需要使用ArrayList<String>或等.

List<String> 是一个界面.

用这个:

import java.util.ArrayList;

...

List<String> supplierNames = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)


Ank*_*kit 13

List是一个接口,您无法初始化接口.实际上实例化一个实现类.

喜欢:

List<String> abc = new ArrayList<String>();
List<String> xyz = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)


Jak*_*rka 9

List只是一个接口,是一些通用列表的定义.您需要提供此列表界面的实现.最常见的两种是:

ArrayList - 在数组上实现的列表

List<String> supplierNames = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

LinkedList - 实现类似互连元素链的列表

List<String> supplierNames = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)


Dan*_*ník 9

在大多数情况下,你想要简单ArrayList- 一个实现List

在JDK第7版之前

List<String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

JDK 7及更高版本可以使用菱形运算符

List<String> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

进一步的信息写在这里Oracle文档 - 集合


Uli*_*Uli 7

取决于您要使用的List类型,类似于

List<String> supplierNames = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

应该让你去.

List是接口,ArrayList是List接口的一个实现.通过阅读List接口JavaDocs,可以找到更适合您需求的更多实现.


Sak*_*boy 6

如果您只想创建一个只包含一个对象的immutable List<T>,则可以使用此API:

List<String> oneObjectList = Collections.singletonList("theOnlyObject”);
Run Code Online (Sandbox Code Playgroud)

更多信息:docs


Sur*_*nga 5

列表是一个接口.你不能使用List来初始化它.

  List<String> supplierNames = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

这些是列中的一些实例化的类,

ArrayList, LinkedList, Vector
Run Code Online (Sandbox Code Playgroud)

您可以根据自己的要求使用其中任何一项.这些每个类都有自己的功能.