带有List和ArrayList的这条语句是什么意思?

问题描述:

我读了Drools的规划师例子,我遇到的代码来了,如同这个有很多:带有List和ArrayList的这条语句是什么意思?

List<Column> columnList = new ArrayList<Column>(n); 

据我得到它,它应该是初始化长度为n的列表,它存储Column数据类型。


但是,什么是与具有上表达的两侧不同的收集的数据类型交易?

如果ArrayList<Column>List<Column>类型的比赛,让他从做不同:

List<Column> columnList = new List<Column>(n); 
+1

列表是一个接口,你不能实例化它 – milan 2012-01-17 14:48:17

List是一个接口。您不能创建接口的实例。

ArrayList是一个实现List的类,你可以创建一个。

接口只是定义行为。实现和接口的类实现该行为。

你会注意到,如果你look at the API,许多不同的类实现List接口。这是因为它们都提供List定义的方法的实现。此外,这些实现可能大不相同,因为和ArrayList的工作方式不同,比如,LinkedList

最好是用表格

List list = new ListType()

,因为你可以在以后更改列表实现,如果你想,在不影响你的代码。这样做的原因是,如果你做

ListType list = new ListType()

列表的类型为ListType,其中仅中ListType和子类的实例有。

如果您执行上面显示的首选分配,那么您可以将分配的任何指定为Listlist

List是一个接口。 ArrayListList的实现。

您不能这样做new List<Column>(n),因为List只是定义了必须实现的方法。

List = (some implementation)背后的想法是,您可以拥有根据接口契约行为的与实现无关的代码。 (即:你可以用LinkedList替换ArrayList,它会工作,虽然它将被完全不同的执行,并且显然会有不同的性能特征)。

列表是一个接口,不能实例化,所以new List将触发编译时错误。你可以做ArrayList<Column> columnList = new ArrayList<Column>(n);,但这种方式你不能轻易地在不同的List实现之间切换(ArrayList就是其中之一)。

+0

何时和为什么我们可能需要在不同的'List'实现之间切换? – cnova 2016-04-07 12:16:37

List实际上是一个接口,因此不能被实例化。所以为了使用列表,你必须创建一个实现对象,例如:ArrayList。阅读http://docs.oracle.com/javase/1.4.2/docs/api/java/util/List.html更多信息

一点题外话到其他的答案,这是值得注意的是,ListcolumnListArrayList编译时类型是运行时类型。