【问题标题】:LinkedList vs List<T> [duplicate]LinkedList vs List<T> [重复]
【发布时间】:2011-08-17 18:32:12
【问题描述】:

可能重复:
When should I use a List vs a LinkedList

如果我不希望对我的数据结构使用按索引访问,我可以节省多少 LinkedList 在 List 上? 如果不是 100% 确定我永远不会使用按索引访问,我想知道其中的区别。

假设我有 N 个实例。在 LinkedList 中插入和删除只会是 o(1) op ,而在 List 中它可能是 O(n),但由于它已优化,因此很高兴知道 n 的某些值有什么区别。 假设 N = 1,000,000 和 N = 1,000,000,000

【问题讨论】:

  • 数据不足。请提供一些具体细节。
  • @Mr.失望:现在失望? :P(抱歉无法抗拒)
  • LinkList 不是通用集合,它是 LinkList,List 是简单数组的通用版本。你的问题就像问猫是否喜欢吃狗粮。
  • @Tony:哦,Tony,...几乎总是,但我更喜欢让别人失望。
  • @Ramhound:不,这个问题的答案取决于猫。 this 问题的答案是,如果可能,您应该始终使用通用集合。内部存储算法经过充分优化,您不必担心它是链表、数组还是哈希表或其他任何东西。

标签: c# performance list linked-list


【解决方案1】:

List&lt;T&gt; 只是一个数组的包装器。 LinkedList&lt;T&gt; 仅在您访问顺序数据(向前或向后)时最有效。

链接列表提供非常快速的列表成员插入或删除。链表中的每个成员都包含一个指向链表中下一个成员的指针,以便在位置 i 插入一个成员:

update the pointer in member i-1 to point to the new member
set the pointer in the new member to point to member i

检查这个:When should I use a List vs a LinkedList

【讨论】:

  • +1000 如果我可以花时间回答一个模糊的问题(正确答案)。
  • Ehhh,声称List&lt;T&gt;“只是一个数组的包装器”是有问题的。首先,严格来说并不正确,具体实现取决于集合的大小。其次,它是一个不能保证永远保持一致的实现细节。这不是您在选择使用List&lt;T&gt; 时应该考虑的事情。关键是让集合类使用最合适的算法来管理你的数据,然后你就可以继续你的生活了。如果您关心实现细节,那么您已经使用了错误的框架。
  • @Cody:我必须同意下划线的实现逻辑。这取决于微软。
【解决方案2】:

LinkedList&lt;T&gt; 在您对列表中的项目执行许多随机插入和删除时很有用。否则,List&lt;T&gt; 可能是最佳选择,因为它不会为链接列表中的元素带来任何开销(也可以被索引)。

但是,如果您担心性能,您确实需要测试您的实际代码。

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2010-09-30
    • 2014-09-17
    • 2011-05-15
    • 2011-08-18
    • 2019-03-15
    • 2014-01-19
    • 1970-01-01
    相关资源
    最近更新 更多