【问题标题】:What is the difference between List and ArrayList? [duplicate]List 和 ArrayList 有什么区别? [复制]
【发布时间】:2013-01-31 22:14:07
【问题描述】:

我最近在办公室的android项目中一直在使用ArrayList,我对List和ArrayList有点困惑,两者有什么区别,我应该使用什么?

我也看到了它的一些实现。

List<SomeObject> myList = new ArrayList<SomeObject>();

ArrayList<SomeObject> myList = new ArrayList<SomeObject>();

这两个实例有什么区别?

【问题讨论】:

标签: java android list arraylist


【解决方案1】:

您的两个示例中的列表实现之间没有区别。 但是,您可以在代码中进一步使用变量 myList 的方式有所不同。

当您将列表定义为:

List myList = new ArrayList();

您只能调用 List 接口中定义的方法和引用成员。 如果定义为:

ArrayList myList = new ArrayList();

您将能够调用特定于 ArrayList 的方法并使用特定于 ArrayList 的成员,以及那些定义从 List 继承的成员。

然而,当你调用第一个例子中List接口的方法时,它是在ArrayList中实现的,ArrayList中的方法会被调用(因为List接口没有实现任何方法)。

这就是所谓的多态性。你可以阅读它。

【讨论】:

  • List 不是一个类,它是一个接口。它没有实现任何方法。因此,如果您在 List 引用上调用方法,实际上您在两种情况下都调用了 ArrayList 的方法。
  • 有一个区别,正如@robonerd 上面解释的那样。 List 是一个接口,你不仅可以使用类或原始类型来键入变量,还可以使用接口。
  • 各位,请仔细阅读我的帖子。不要将定义与实现混为一谈。在这两种情况下,实现都是相同的:ArrayList。变量的定义不同。不确定您要在我​​的回答中更改什么。
  • @ATrubka,在这两个例子中,如果我调用一个方法,它将执行 ArrayList 类中的方法,那么定义 List myList = new ArrayList(); 有什么用
  • 这样你就可以将你的代码与 List 接口的特定实现分离。如果后来有人认为 LinkedList 更好,那么唯一改变的就是分配。上面的例子太微不足道了,无法证明它的好处。现实生活中的例子有更多。例如,将有一个将 List 作为参数而不是 ArrayList 的方法。看看 Collections.sort() 和 Collections 类的其他方法。
猜你喜欢
  • 2015-11-08
  • 2014-07-22
  • 2017-05-08
  • 2019-03-15
  • 2020-08-20
  • 1970-01-01
  • 2015-12-07
  • 2021-04-23
  • 1970-01-01
相关资源
最近更新 更多