OOP:ArrayList al = new ArrayList()和List al = new ArrayList()之间的区别?

时间:2011-01-04 10:24:32

标签: java collections

  

可能重复:
  List versus ArrayList

之间的区别
ArrayList al = new ArrayList() 

List al = new ArrayList() ?

3 个答案:

答案 0 :(得分:10)

没有,从创作的角度来看。两者都创建ArrayList

的实例

不同之处在于,在第二个示例中,al允许访问List接口上实现的所有方法,而在第一个示例中,al允许访问所有(可访问的) )ArrayList类的方法和字段。

实用的经验法则:使用第二种模式。如果你需要ArrayList实现中的一些额外的好东西,那么你总是可以施放:

 List list = new ArrayList();
 // do some adds/removes/... on the list
 ((ArrayList) list).trimToSize();

答案 1 :(得分:7)

它被称为接口编程。假设您需要从方法中返回此list。因此,调用代码可以将其转换为List变量。

public ArrayList getList() {
   ArrayList list = new ArrayList();
    // do something with the list here
   return list;
}

而且,

public List getList() {
   List list = new ArrayList();
    // do something with the list here
   return list;
}

现在对于后一种方法,调用代码可以在List类型变量中包含返回的列表。你可以稍后轻易地决定,出于某种原因,这样的事情,

public List getList() {
   List list = new LinkedList();
    // do something with the list here
   return list;
}

调用代码没有变化,而前者需要更改返回类型,这最终会搞砸调用代码。

答案 2 :(得分:7)

将关于MapHashMap的{​​{3}}解释为my answer

对象之间没有区别。您对该对象的接口有所不同。在第一种情况下,界面为ArrayList,而在第二种情况下,界面为List。但是,底层对象是相同的。

使用List的好处是,您可以将基础对象更改为不同类型的列表,而不会违反与使用它的任何代码的合同。如果您将其声明为ArrayList,则如果要更改基础实现,则必须更改合同。