List和ArrayList有什么区别?

Ari*_*nua 150 java android list arraylist

我最近在办公室的android项目中使用了ArrayList,我在List和ArrayList之间有点混淆,两者的区别是什么,我应该使用什么?

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

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

ArrayList<SomeObject> myList = new ArrayList<SomeObject>();
Run Code Online (Sandbox Code Playgroud)

这两个实例有什么区别?

ATr*_*bka 165

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

将列表定义为:

List myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

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

ArrayList myList = new ArrayList();
Run Code Online (Sandbox Code Playgroud)

除了那些定义从List继承的成员之外,您还可以调用特定于ArrayList的方法并使用特定于ArrayList的成员.

然而,当您在第一个示例中调用List接口的方法(在ArrayList中实现)时,将调用ArrayList中的方法(因为List接口不实现任何方法).

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

  • List不是一个类,它是一个接口.它没有实现任何方法.因此,如果在List引用上调用方法,实际上在两种情况下都调用ArrayList的方法. (196认同)
  • 伙计们,请仔细阅读我的帖子.不要将定义与实现混合在一起.在这两种情况下,实现都是相同的:ArrayList.变量的定义不同.不知道你在答案中想要改变什么. (6认同)
  • 正如@robonerd上面解释的那样,有一点不同.List是一个接口,您不仅可以使用类或基元类型键入变量,还可以使用接口键入变量. (3认同)
  • 通过这种方式,您可以将代码与 List 接口的特定实现分离。如果后来有人认为 LinkedList 更好,那么唯一改变的就是赋值。上面的例子太简单了,无法说明好处。现实生活中的例子更多。例如,将有一个方法将 List 而不是 ArrayList 作为参数。看看 Collections.sort() 和 Collections 类的其他方法。 (2认同)