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

试图使用下面的代码:

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

我收到以下错误信息:

java.util.List是抽象的; 不能被实例化

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

在Java中, List是一个接口 。 也就是说,它不能直接实例化。

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

由于ArrayList 一种List ,你可以很容易地向上播放:

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

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

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

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

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

List是接口,而不是一个类,所以它不能被实例化。 ArrayList最有可能是你在之后:

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

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

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

简而言之,你不能创build一个列表,因为它是一个不包含具体代码的接口 – 这就是实现这个列表的类的工作,其中ArrayList是目前使用最多的(并且有很好的理由!)

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

在Java中, List不是真实的东西。 这是一个界面,一种定义对象如何与其他对象进行交互的方式。 因此,它不能被实例化。 ArrayListList接口的一个实现,就像链表一样,依此类推。 改用这些。

java中的List是定义“列表”必须具有的特定质量的接口。 特定的列表实现,比如ArrayList实现这个接口,并且充实了各种方法的工作方式。 你想用这个清单来完成什么? 很可能,其中一个内置列表将为您工作。