ArrayList声明

时间:2012-09-28 17:36:22

标签: java arraylist

  

可能重复:
  ArrayList declaration Java

在Java中,为什么ArrayList经常使用List声明?

List<String> strList1 = new ArrayList<String>();
ArrayList<String> strList2 = new ArrayList<String>();

我无法理解这两者之间的区别。这个比那个好吗?或具有特定用途?

7 个答案:

答案 0 :(得分:5)

ArrayList类实现List接口。

声明接口类型的对象通常是一种好习惯,当然也可以使用该接口的实现来实例化它。

这样,您可以在需要时更改实现,但声明的类型保持不变。这样,您可以避免修改太多代码,尤其是在将变量作为参数的方法中。该方法不断将List作为参数,而不是某个实现。

答案 1 :(得分:4)

在Java中,接口中的List,而ArrayList是实现该接口的几个类之一。第一种表示法的优点是您可以轻松更改您使用的实现,而无需更改其余代码。例如,您可能稍后决定使用Vector而不是ArrayList,因此您可以将代码更改为:

List<String> strList1 = new Vector<String>();

答案 2 :(得分:1)

这里的想法是你设计界面而不是具体对象本身。界面更加灵活,如果您愿意或需要,您可以稍后将strList1换成LinkedList

答案 3 :(得分:1)

Liscov Substitution Principle

  

可替代性是面向对象编程的一个原则。它指出,在计算机程序中,如果S是T的子类型,则类型T的对象可以用类型S的对象替换(即,类型S的对象可以替换类型为T的对象)而不改变任何该程序的理想属性(正确性,执行任务等)。

ArrayListList的子类型。

答案 4 :(得分:1)

这个问题并不特别,但总是建议使用接口而不是Class来保持参考,这允许您在需要时随时更改实现。 例如,您可以随时将其更改为链接列表

答案 5 :(得分:1)

当您将代码绑定到接口时,您可以在需要时轻松更改实现类。

如果您使用Concrete类进行编码,则可以通过使代码绑定到该类来使用特定于该类的功能。未来的更换变得困难。

要更好地理解这个功能,请考虑来自第三方的课程。您无需将代码依赖于任何特定供应商。您可以随意将课程更改为其他供应商。两者都受界面约束,因此更改很容易。

答案 6 :(得分:1)

我认为基本上,之前的回复是说您可以将List向上转换为ArrayList或另一个也实现List接口的对象。