我们在需要列表时使用List。我现在注意到有一个LinkedList。
我想知道这两者之间有什么区别,何时应该使用另一个。
答案 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复杂度理论常常使现实世界的结果有所不同。