什么是List与ArrayList?

use*_*892 24 java list arraylist

这两个对象之间的根本区别是什么?一个更有效率?有没有更多的方法?

whi*_*win 24

List在接口中,而ArrayList是一个类.

请参见ArrayListList.

例如,您无法使用此设置:

List<String> list = new List<String>();...因为它是一个界面.

但是,这有效:

ArrayList<String> arrayList = new ArrayList<String>();

另外......你可以像下面的duffymo那样做,这或多或少与实现List接口相同(制作你自己的列表实现).

  • 不,但你可以这样做:List <String> list = new List <String>(){//在这里实现所有List方法.}; (4认同)

Ray*_*Ray 19

考虑如下所示的行:

List<String> names = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

如果您是面向对象体系结构的新手,您可能期望看到类似的东西ArrayList<String> names = new ArrayList<String>();.毕竟,你刚才说它是新的ArrayList,所以你不应该把它存储在一个类型的变量中ArrayList吗?

嗯,你当然可以做到这一点.然而,List一个接口 - 就像一个类型的模板 - ArrayList据说继承.这是一份合同,上面写着"无论何时使用List实现,您都可以期待这些方法可用".在的情况下List,该方法之类的东西add,get等等.

ArrayList只是一个实现List.还有其他的,比如LinkedList.两者具有相同的界面,并且可以以相同的方式使用,但在幕后工作方式非常不同.ArrayList"随机"访问在哪里,意味着它直接找到数组的特定元素而不遍历整个列表,LinkedList必须从第一个元素开始并逐个进行直到它到达您需要的元素.

问题是,虽然你确实需要在创建对象时指定你想要的东西,但你通常只需要传达它只是一个事实List,所以你只需说它是什么.List传达您有一个集合,该集合旨在按照给定的顺序.如果你不需要那么多的沟通,你可以考虑将它作为一个传递Collection,这是另一个接口(超级接口List).或者,如果你需要沟通的是你可以迭代它,你甚至可以称之为Iterable.


duf*_*ymo 14

List是一个接口; ArrayList是一个实现List接口的类.

接口定义了所需的方法签名,但没有说明它们是如何实现的.

实现接口的类承诺提供具有接口声明的相同签名的方法的公共实现.