声明中List和ArrayList的区别?

时间:2013-05-09 17:05:45

标签: java list arraylist declaration array-difference

这两者有区别吗?如果是这样,它是什么?

List<Integer> x = new ArrayList<Integer>();

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

4 个答案:

答案 0 :(得分:2)

第一个声明允许您编程接口。它确保您以后可以使用ArrayList安全地替换LinkedList,其余代码将进行编译。

第二个声明允许您对该类进行编程,因此您可能会使用ArrayList未实现List接口的方法。例如,您可以在声明为ensureCapacity()的列表上调用ArrayList,但不能在声明为List的列表上调用ensureCapacity()。虽然通常编程接口应该是首选,但如果你必须调用特定于类的方法,那么执行它是没有错的:例如,如果你知道你的新目标大小,调用{{1}}的能力可以节省一些不必要的重新分配。列表。

答案 1 :(得分:0)

前者是首选。它允许更改实现,而无需更改依赖于字段的代码。

Effective Java中, Joshua Bloch说:

  

如果存在适当的接口类型,则应使用接口类型声明参数,返回值,变量和字段。

     

...

     

如果您养成使用接口作为类型的习惯,您的程序将更加灵活。

答案 2 :(得分:0)

如果您对接口进行编码,那么您可以毫不费力地更改实现

List<Integer> x = new ArrayList<Integer>();

你现在可以使x指向LinkedList或只有一行代码的List的任何其他实现。如果您需要ArrayList中的特定方法,那么在左侧使用ArrayList是完全可以接受的。 99次中有100次认为你不会这样列表是首选

答案 3 :(得分:0)

使用ArrayList,您可以指定intitalsize,因此ArrayList具有trimToSize()方法,可将其大小调整为当前大小。使用List<Integer>,您将无法修剪尺寸,除非你把它重新投射到ArrayList