2012-06-13 40 views
3

什么定义这样一个数组列表之间的区别:Java列表创建方法区别

List list = new LinkedList(); 

像这样?

LinkedList list = new LinkedList(); 
+2

那么,首先,既不是数组列表。 –

回答

2

至于其他的答案都建议,名单是接口,和LinkedList是实际执行的类型。例如,如果您后来决定要使用ArrayList,则可以键入:

List list = new ArrayList(); 

因为ArrayList声明接口List。缺点是,如果您想稍后调用不属于List接口的ArrayList/LinkedList /(具有不在列表中的方法的其他类名)的任何方法(这可能不是问题),你将不得不检查它是否真的是一个ArrayList等,并将其转换为这些类型。就像这样:

ArrayList arrayList = (ArrayList) list; 

*只检查,这确实是一个ArrayList后,否则抛出异常。

1

一个使用interface作为变量的类型。另一种使用concrete class类型。

一般来说,最好使用可变类型的接口类型,因为它们更便于携带,产生的紧密度更低coupling

0

这两个工作。区别在于List是一个接口,LinkedList是一个实现。使用接口被认为是更好的做法,因为您可以稍后轻松切换实施。

1

这被称为接口编码。它有一定的好处。根据你的问题,我认为你是这个语言的新手。

根据Java世界,以下是一些好处

设计:一个对象的方法可以迅速地确定和 发布到所有受影响的开发商开发:Java编译器 保证了接口的所有方法有快速的连接类或子系统一起,由于其 完善的接口测试的 能力:与 正确的签名,并且在接口的所有变化都 立即给其他开发者集成可见被实现的接口帮助异晚 错误,因为它们限制了可能的逻辑错误的范围,方法

这是开始阅读http://www.javaworld.com/jw-08-1999/jw-08-interfaces.html

2

第一个声明列表的好地方,并与初始化一个给定的 集List接口的一个新的LinkedList具体实现。其余的代码并不关心具体的实现。唯一重要的是它是一个List。如果您后来认识到ArrayList更高效,则只需更改初始化。

第二个声明一个LinkedList,并用一个新的LinkedList初始化它。其余的代码知道它是一个LinkedList,并且可以使用LinkedList中不在List中的方法。如果您稍后意识到ArrayList更高效,则可能需要更改其余的代码。

第一个应该通常是首选:尽可能使用最通用的类​​型,并且编码为接口而不是实现。

而且,你永远不应该使用原始类型,但总是泛型类型:

List<String> list = new LinkedList<String>(); 
+0

加上一个提及泛型 - 我整天与10年旧的遗留代码战斗,这是最糟糕的:Vector foo = new Vector(); – David