如何在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)); 

我面临以下错误:

无法实例化typesList<String>

我如何实例化List<String>

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

 Interface List<E> 

作为一个interface意味着它不能被实例化(没有new List()是可能的)。

如果你检查这个链接,你会发现一些实现List class

所有已知的实现类:

AbstractListAbstractSequentialListArrayListAttributeListCopyOnWriteArrayListLinkedListRoleListRoleUnresolvedListStackVector

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

最常用的三种可能是:

  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

列表是一个接口 ,你不能实例化一个接口,因为接口是一个约定,什么方法应该有你的类。 为了实例化,您需要该接口的一些实现(实现)。 尝试下面的代码与非常stream行的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<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<String> supplierNames = new ArrayList<String>(); 

应该让你去。

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

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

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

这些是List推动的一些类,

 ArrayList, LinkedList, Vector 

你可以按照你的要求使用这些。 这些每个类都有自己的特点。

如果你只是想创build一个只有一个对象的不可变的 List<T> ,你可以使用这个API:

 List<String> oneObjectList = Collections.singletonList("theOnlyObject”); 

更多信息: docs

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(toList()); 

JDK9

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

另外还有其他一些像Guava这样的图书馆提供的其他方法。