什么是列表与数组列表?

2022-09-01 19:58:30

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


答案 1

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

请参见 ArrayListList

例如,您不能使用此设置:

List<String> list = new List<String>();...因为它是一个接口。

但是,这有效:

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

也。。。你可以按照duffymo在下面说的那样,这或多或少与实现接口(制作自己的列表实现)相同。List


答案 2

考虑如下行:

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

如果您不熟悉面向对象的体系结构,您可能期望看到类似 .毕竟,您刚刚说过它是新的,所以您不应该将其存储在类型的变量中吗?ArrayList<String> names = new ArrayList<String>();ArrayListArrayList

好吧,你当然可以做到这一点。但是,是一个接口 - 类似于某种模板 - 据说是继承的。这是一个合同,上面写着“每当你使用一个实现时,你可以期望这些方法可用”。在 的情况下,这些方法是 、 等。ListArrayListListListaddget

但只是 的一个实现。还有其他一些,例如 .两者具有相同的界面,并且可以以相同的方式使用,但在幕后的工作方式却大不相同。其中“随机”访问,这意味着它直接查找数组的特定元素而不循环访问整个列表,必须从第一个元素开始并逐个进行,直到它到达您需要的元素。ArrayListListLinkedListArrayListLinkedList

问题是,虽然在创建对象时确实需要指定所需的内容,但通常只需要传达它是一个,所以你只需说这就是它是什么。 表示您有一个集合,该集合旨在按给定的顺序排列。如果您不需要那么多通信,则可以考虑将其作为 传递,这是另一个接口(的超级接口)。或者,如果您只需要进行通信就可以迭代它,您甚至可以将其称为 .ListListCollectionListIterable