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

2022-08-31 04:24:06

我无法初始化 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>


答案 1

如果你检查API,你会发现它说:List

Interface List<E>

作为意味着它不能被实例化(不可能没有)。interfacenew List()

如果您检查该链接,您会发现一些实现:classList

所有已知的实现类:

AbstractList, , , , , , , , ,AbstractSequentialListArrayListAttributeListCopyOnWriteArrayListLinkedListRoleListRoleUnresolvedListStackVector

其中一些可以实例化(未定义为 的那些)。使用他们的链接来更多地了解他们,即:知道哪个更适合你的需求。abstract class

最常用的3个可能是:

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

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

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

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


答案 2

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

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");