这两个arrayList定义有什么不同?

时间:2013-02-19 16:26:13

标签: java arraylist

我将这两个语句用于ArrayList定义:

ArrayList<String> my = new ArrayList<>();
List<String> my2 = new ArrayList<>();

我应该使用哪一个?

3 个答案:

答案 0 :(得分:3)

使用第二个定义,您可以稍后将ArrayList构造函数替换为另一种类型的List,例如LinkedList或高性能列表,或将来可能存在的任何其他类型的列表。在第一个定义中,您将永远与ArrayList实现绑定。您无法更改它,因为您的其余代码信任此引用显式为ArrayList。

相反,通过使用接口,您的代码依赖于接口的契约,而不是特定实现(如ArrayList)。这使您能够在不影响其用户的情况下更改实现。改变是我们必须培养和提前计划的事情,因为我们无法防止事情发生变化。

答案 1 :(得分:1)

后者。编程到接口,而不是实现。

答案 2 :(得分:1)

取决于您的需求。如果可能的话,通常建议使用接口(因此使用List),否则你会坚持使用实现类。比如说,你使用ArrayList作为某种方法的输入参数。出于某种原因(例如性能),您决定在某些时候从ArrayList切换到LinkedList。因此,您还必须更改输入参数的类型。如果使用interface(List),则可以更自由地切换实现,而无需重构代码。