什么定义这样一个数组列表之间的区别:Java列表创建方法区别
List list = new LinkedList();
像这样?
LinkedList list = new LinkedList();
什么定义这样一个数组列表之间的区别:Java列表创建方法区别
List list = new LinkedList();
像这样?
LinkedList list = new LinkedList();
至于其他的答案都建议,名单是接口,和LinkedList是实际执行的类型。例如,如果您后来决定要使用ArrayList,则可以键入:
List list = new ArrayList();
因为ArrayList声明接口List。缺点是,如果您想稍后调用不属于List接口的ArrayList/LinkedList /(具有不在列表中的方法的其他类名)的任何方法(这可能不是问题),你将不得不检查它是否真的是一个ArrayList等,并将其转换为这些类型。就像这样:
ArrayList arrayList = (ArrayList) list;
*只检查,这确实是一个ArrayList后,否则抛出异常。
一个使用interface作为变量的类型。另一种使用concrete class类型。
一般来说,最好使用可变类型的接口类型,因为它们更便于携带,产生的紧密度更低coupling。
这两个工作。区别在于List
是一个接口,LinkedList
是一个实现。使用接口被认为是更好的做法,因为您可以稍后轻松切换实施。
这被称为接口编码。它有一定的好处。根据你的问题,我认为你是这个语言的新手。
根据Java世界,以下是一些好处
设计:一个对象的方法可以迅速地确定和 发布到所有受影响的开发商开发:Java编译器 保证了接口的所有方法有快速的连接类或子系统一起,由于其 完善的接口测试的 能力:与 正确的签名,并且在接口的所有变化都 立即给其他开发者集成可见被实现的接口帮助异晚 错误,因为它们限制了可能的逻辑错误的范围,方法
这是开始阅读http://www.javaworld.com/jw-08-1999/jw-08-interfaces.html
第一个声明列表的好地方,并与初始化一个给定的 集List接口的一个新的LinkedList具体实现。其余的代码并不关心具体的实现。唯一重要的是它是一个List。如果您后来认识到ArrayList更高效,则只需更改初始化。
第二个声明一个LinkedList,并用一个新的LinkedList初始化它。其余的代码知道它是一个LinkedList,并且可以使用LinkedList中不在List中的方法。如果您稍后意识到ArrayList更高效,则可能需要更改其余的代码。
第一个应该通常是首选:尽可能使用最通用的类型,并且编码为接口而不是实现。
而且,你永远不应该使用原始类型,但总是泛型类型:
List<String> list = new LinkedList<String>();
加上一个提及泛型 - 我整天与10年旧的遗留代码战斗,这是最糟糕的:Vector foo = new Vector(); – David
那么,首先,既不是数组列表。 –