每当我们需要列表时,我们使用List。我现在注意到有一个LinkedList。
我想知道这两者之间的区别,以及何时该使用其中之一。
嗯,List<T>
基本上由一个通常比当前项目数量大的数组支持。元素被放入数组中,并在旧数组耗尽空间时创建一个新数组。这对于索引访问很快,但在列表内删除或插入元素或在开头进行操作时很慢。在列表末尾添加/删除条目相对便宜。
LinkedList<T>
是一个双向链接列表 - 每个节点都知道其前一个条目和下一个条目。这对于在特定节点(或头部/尾部)之后/之前插入很快,但按索引访问很慢。
LinkedList<T>
通常会占用比 List<T>
更多的内存,因为它需要为所有这些 next/previous 引用提供空间 - 并且数据可能具有更少的引用局部性,因为每个节点是单独的对象。另一方面,List<T>
可以具有远大于其当前需求的支持数组。
List<T>
是实际上是一个数组,这意味着在结尾处进行Add
操作的时间复杂度为O(1),而在开头则为O(n),但你可以用O(1)的时间复杂度对其进行索引。而LinkedList<T>
正如其名,是一个链表。由于它是双向链表,因此您可以在O(1)的时间内在前面或后面添加项目,但是对其进行索引的时间复杂度为O(n)。
在几乎所有情况下,List都会比LinkedList表现更优。但在实际应用中,结果有时与大O复杂度理论不同。
原始答案:Original Answer
List<T>
在内存使用方面可能更加高效。 - Jon Skeet