如何对列表初始化java_如何在Java中初始化List

本文介绍了在Java中初始化List接口的多种方法,包括使用ArrayList、LinkedList、Vector等实现类,以及使用Arrays.asList和Stream API。同时,文章强调了不能直接实例化接口List,并给出了错误示例和解决方案。
摘要由CSDN通过智能技术生成

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

List supplierNames = new List();

supplierNames.add("sup1");

supplierNames.add("sup2");

supplierNames.add("sup3");

System.out.println(supplierNames.get(1));

我面临以下错误:

Cannot instantiate the type List

如何实例化List?

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

Interface List

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

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

All Known Implementing Classes:

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

那些可以实例化。使用他们的链接了解更多关于他们的信息,I.E:了解哪个更符合您的需求。

最常用的3种可能是:

List supplierNames1 = new ArrayList();

List supplierNames2 = new LinkedList();

List supplierNames3 = new Vector();

奖金:

您还可以使用Arrays class以更简单的方式使用值对其进行实例化,如下所示:

List supplierNames = Arrays.asList("sup1","sup2","sup3");

System.out.println(supplierNames.get(1));

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

Arrays.asList很棒但是你应该注意到现在无法做到像int[] a = {1,2,3}; System.out.println(Arrays.asList(a)); [[I@70cdd2]这样的情况

@监狱。多数民众赞成没有发生。这是一个元素的列表,其中一个元素是一个int数组。想要的行为可能是三个元素1,2和3的列表。

@Christoffer Hammarstrm打印一个列表或一个数组,你可以使用java.util.Arrays.toString(array);,所以这个功能已经给出..

@ Maxr1998我不知道你在说什么,我的意思是[I@70cdd2是一个整数数组的.toString(),而不是像List的内存地址。说过。

@Christopher Hammarstrm toString打印内存地址。

我的方法打印内容。

像这样和在这里使用Vector的一些减少使用。由于线程问题

如果您需要结果列表为ArrayList,请使用new ArrayList<>(Arrays.asList("sup1","sup2","sup3"))

我有一个方法返回List到List正常工作。有人知道这是怎么回事吗? ListtableList = getTableNames(sqlString);

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

JDK2

List list = Arrays.asList("one","two","three");

JDK7

//diamond operator

List list = new ArrayList<>();

list.add("one");

list.add("two");

list.add("three");

JDK8

List list = Stream.of("one","two","three").collect(Collectors.toList());

JDK9

// creates immutable lists, so you can't modify such list

List 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 mutableList = new ArrayList<>(List.of("one","two","three"));

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

List list = Lists.newArrayList("one","two","three");

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

List supplierNames = new ArrayList();

要么

List supplierNames = new LinkedList();

您需要使用ArrayList等。

List是一个界面。

用这个:

import java.util.ArrayList;

...

List supplierNames = new ArrayList();

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

喜欢:

List abc = new ArrayList();

List xyz = new LinkedList();

在大多数情况下,您需要简单的ArrayList - List的实现

在JDK第7版之前

List list = new ArrayList();

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

List list = new ArrayList<>();

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

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

ArrayList - 在数组上实现的列表

List supplierNames = new ArrayList();

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

List supplierNames = new LinkedList();

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

List oneObjectList = Collections.singletonList("theOnlyObject");

更多信息:docs

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

List supplierNames = new ArrayList();

应该让你去。

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

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

List supplierNames = new ArrayList();

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

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

像这样和在这里使用Vector的一些减少使用。由于线程问题

以防万一,任何人仍然围绕这个问题挥之不去。因为,我看到一两个新用户再次提出同样的问题,然后每个人都在说,不,你不能这样做,亲爱的普律当丝,除了这里给出的所有答案,我想提供更多信息 -

是的你实际上可以做,List list = new List();

但是以编写接口的所有方法的实现为代价。

这个概念不仅仅是List list = new List();但

List list = new List(){

@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;

}

.....等等(不能写所有方法。)

这是Anonymous类的一个例子。有人陈述时,它是正确的,不,你不能实例化一个界面,这是正确的。但是你永远不能说,你可以写List list = new List();但是,显然你可以做到这一点,这是一个很难说明你做不到的事情。

但要清楚,这并不会创建一个实际类型为List的对象。相反,它声明一个没有名称并实现List的新类,并在运行时创建新声明的类的新对象。

我们创建了soyuz-to来简化1个问题:如何将X转换为Y(例如String到Integer)。构造对象也是一种转换,因此它具有构造Map,List,Set的简单功能:

import io.thedocs.soyuz.to;

List names = to.list("John","Fedor");

请检查它 - 它有很多其他有用的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值