List <t>和LinkedList <t> </t> </t>之间的差异

时间:2010-11-25 16:19:27

标签: c# c#-4.0

我们在需要列表时使用List。我现在注意到有一个LinkedList。

我想知道这两者之间有什么区别,何时应该使用另一个。

3 个答案:

答案 0 :(得分:81)

好吧,List<T>基本上由数组支持,该数组通常大于当前项目数。这些元素放在一个数组中,当旧的数组空间不足时,会创建一个新数组。这对于索引访问来说很快,但在删除或插入列表中或开头的元素时速度很慢。添加/删除列表末尾的条目相当便宜。

LinkedList<T>是一个双向链表 - 每个节点都知道它的前一个条目和下一个条目。这对于在特定节点(或头/尾)之后/之前插入很快,但在索引访问时速度很慢。

LinkedList<T> 通常会占用比List<T>更多的内存,因为它需要所有下一个/上一个引用的空间 - 并且数据可能具有较少的引用位置,如每个节点都是一个单独的对象。另一方面,List<T> 可以拥有一个比当前需求大得多的支持数组。

答案 1 :(得分:9)

List<T>实际上是一个数组,意味着它的Add操作在结尾是O(1),在前面是O(n),但是你可以在O(1)中索引它。 )。正如它所说,LinkedList<T>是一个链表。由于它是双向链接的,你可以在O(1)中向前面或后面添加项目,但索引到它是O(n)。

答案 2 :(得分:-1)

在几乎所有情况下,列表的性能都要优于LinkedList。大O复杂度理论常常使现实世界的结果有所不同。