在Java中“实例化”一个列表?

时间:2011-07-25 00:22:17

标签: java list

尝试使用以下代码:

List<Integer> list = new List<Integer>();

我收到以下错误消息:

  

java.util.List是抽象的;无法实例化

这是什么意思,为什么我不能像List一样初始化ArrayList

6 个答案:

答案 0 :(得分:166)

在Java中,List接口。也就是说,它无法直接实例化。

相反,您可以使用ArrayList,它是该接口的一个实现,它使用数组作为其后备存储(因此名称)。

由于ArrayList 是一种List,您可以轻松地将其翻译:

List<T> mylist = new ArrayList<T>();

这与.NET形成对比,从版本2.0开始,List<T>IList<T>接口的默认实现。

答案 1 :(得分:28)

List是一个接口,而不是具体的类 接口只是一个类可以实现的一组函数;实例化一个接口没有任何意义。

ArrayList是一个具体的类,恰好实现了这个接口及其中的所有方法。

答案 2 :(得分:25)

使用List<Integer> list = new ArrayList<Integer>();

答案 3 :(得分:11)

List是接口,而不是类,因此无法实例化。 ArrayList很有可能是您追求的目标:

ArrayList<Integer> list = new ArrayList<Integer>();

Java中的接口实质上定义了类的蓝图 - 实现接口的类必须提供列表定义的方法的实现。但实际的实现完全取决于实现类,在这种情况下为ArrayList

JDK还提供了LinkedList - 一种替代实现,它再次符合列表界面。它与下面的ArrayList的工作方式非常不同,因此在列表中间添加/删除项目时效率更高,但对于绝大多数用例而言效率较低。当然,如果你想定义自己的实现,那么它是完全可能的!

简而言之,您无法创建列表,因为它是一个不包含具体代码的接口 - 这是实现该列表的类的工作,其中ArrayList是迄今为止最常用的(并且具有良好的用途)原因!)

值得注意的是,在C#中,List是一个类,而不是一个接口 - IList。同样的原则适用于不同的名称。

答案 4 :(得分:4)

List在Java中不是真实的东西。它是一个接口,一种定义允许对象与其他对象交互的方式。因此,它无法实例化。 ArrayListList接口的实现,链接列表也是如此,依此类推。请改用它们。

答案 5 :(得分:3)

java中的List是一个定义“列表”必须具有的某些特性的接口。特定列表实现(例如ArrayList)实现此接口并充实各种方法的工作方式。你想用这个清单做什么?最有可能的是,其中一个内置列表适合您。