java列表创建方法的区别

时间:2012-06-13 14:37:53

标签: java

定义这样的arraylist之间的区别是什么:

List list = new LinkedList(); 

并且喜欢这个?

LinkedList list = new LinkedList();

5 个答案:

答案 0 :(得分:2)

第一个声明一个List,并使用List接口的新LinkedList具体实现对其进行初始化。其余代码不关心具体实现。唯一重要的是它是一个List。如果您稍后意识到ArrayList更有效,则只需更改初始化。

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

首先应该首选:尽可能使用最通用的类​​型,然后编写接口而不是实现。

此外,您永远不应使用原始类型,但始终使用泛型类型:

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

答案 1 :(得分:2)

正如其他答案所示,List是接口,LinkedList是实际的实现类型。例如,如果您后来决定要使用ArrayList,则可以键入:

List list = new ArrayList();

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

ArrayList arrayList = (ArrayList) list;

*仅在检查它确实是一个ArrayList之后,否则抛出异常。

答案 2 :(得分:1)

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

一般来说,最好为变量类型使用接口类型,因为它们更易于移植并且产生的紧密度较低coupling

答案 3 :(得分:1)

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

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

  

设计:可以快速指定对象的方法   发布给所有受影响的开发人员开发:Java编译器   保证接口的所有方法都是用。实现的   正确的签名以及对接口的所有更改都是   其他开发人员立即可见集成:有   能够快速连接类或子系统,因为   他们完善的接口测试:接口有助于隔离   错误,因为它们将可能的逻辑错误的范围限制在给定的范围内   方法的子集

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

的好地方

答案 4 :(得分:0)

两者都有效。区别在于List是一个接口,LinkedList是一个实现。使用接口被认为是一种更好的做法,因为您可以在以后轻松切换实现。