2013-05-09 59 views
0

这两者有区别吗?如果是这样,那是什么?声明中List和ArrayList的区别?

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

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

这个问题已经被问了太多次了! – 2013-05-09 17:06:58

+0

人们可以看到有2个问题和2个答案,但他们仍然想发布另一个答案,geez ... – 2013-05-09 17:10:18

回答

2

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

第二个声明允许您编程到该类,因此您可以使用ArrayList的方法,该方法不实现List接口。例如,您可以在声明为ArrayList的列表上呼叫ensureCapacity(),但不能在声明为List的列表上呼叫。尽管通常编程接口应该是首选,但如果您必须调用特定于类的方法,则没有任何问题:例如,如果知道列表的新目标大小,调用ensureCapacity()的能力可以节省一些不必要的重新分配。

0

前者是优选的。它允许更改实现而不更改依赖于该字段的代码。

有效的Java,约书亚·布洛克说:

如果存在合适的接口类型,那么参数,返回值,变量和字段都应该使用接口类型声明。

...

如果你进入使用接口作为类型的习惯,你的程序将更加灵活。

0

如果你的代码接口,那么你可以改变实现,没有什么麻烦

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

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

0

随着ArrayList你可以指定一个intitalsize等ArrayList中有trimToSize()方法来削减其大小,以当前size.With List<Integer>您将无法修剪大小除非你把它扔回ArrayList