如何声明ArrayList?

时间:2012-06-12 14:58:27

标签: java collections

  

可能重复:
  Why should the interface for a Java class be prefered?

我是java的新手,我刚开始使用集合框架。 在ArrayList上,我在两个方面遇到了人们宣称它。例如,声明ArrayList的{​​{1}}:

String

List<String> l = new ArrayList<String>();

我应该使用这两者中的哪一个,它们之间有什么区别?

我知道调用的实际方法是在运行时决定的,因此调用的方法都只有ArrayList<String> al = new ArrayList<String>(); 类,但第一个声明仍然限制了可以调用的方法。

第一种方式是,我听过,称为#34;编码到界面&#34;。任何方法都将使用变量ArrayList调用,因此只能调用l接口提供的方法,而在第二个示例中,我们不仅可以调用List提供的所有方法但也可以List类(如Objectfinalize()等)。那么为什么即使在第一时间人们甚至使用第一个宣言?

2 个答案:

答案 0 :(得分:4)

您应始终使用最少的特定界面。如果存在更合适的实现,则可以更容易地替换替代实现。例如,如果列表是链表或数组列表,则List的方法不关心。您可以选择哪一个更合适。

答案 1 :(得分:2)

我个人建议使用List<String> l = new ArrayList<String>();

原因是您通常不需要知道您正在使用ArrayList。你只需要像列表那样运作的东西。人们不需要访问的ArrayList上有很多行为。考虑“EnsureCapacity”。他们不需要 - 他们只需要List操作。作为一般规则,您希望在“需要知道”的基础上限制数据和功能的暴露,并且列表的用户不需要知道(默认情况下)您使用的实现。

显然,如果他们确实需要知道您正在使用ArrayList而不是LinkedList,那么您可能希望使用ArrayList引用而不是List引用。但是,对于大多数目的而言,这不是必需的。