2011-05-03 22 views
0

可能重复:
When should I use a List vs a LinkedList链表VS列表<T>

如果我希望不使用 的LinkedList在列表中使用通过索引访问我的数据结构多少钱,我救? 如果我不能100%确定我将永远不会使用按索引访问,我想知道其中的差异。

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

+0

数据不足。请提供一些具体的细节。 – 2011-05-03 14:22:16

+0

@Mr。失望:现在失望了? :P(抱歉无法抗拒) – 2011-05-03 14:22:48

+0

LinkList不是一个通用集合,它是一个LinkList,List是一个简单数组的通用版本。你的问题就像问一只猫是否会喜欢吃狗食。 – 2011-05-03 14:24:36

回答

4

List<T>只是一个数组的封装。 LinkedList<T>只有在访问顺序数据(向前或向后)时才是最有效的。

链接列表提供非常快的插入或删除列表成员。在链表的每个成员包含一个指向该列表中的下一个成员,以便在位置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

+0

+1000如果我可以花时间回答一个模糊的问题(用正确的答案)。 – 2011-05-03 14:31:08

+0

Ehhh,声称“List '是”仅仅是一个数组的封装“是有问题的。首先,这不是完全正确的,具体的实施取决于集合的大小。其次,这是一个实施细节,不能保证永远保持一致。在选择使用'List '时,你不应该考虑这一点。关键是让集合类使用最合适的算法来管理您的数据,然后您就可以继续生活。如果您关心实现细节,那么您已经在使用错误的框架。 – 2011-05-03 14:35:32

+0

@Cody:我必须同意下划线实现逻辑。这取决于微软。 – Priyank 2011-05-03 14:48:58

1

LinkedList<T>对于在列表中执行许多随机插入和删除项目很有用。否则,List<T>可能是最好的选择,因为它没有链接列表中的元素(也可以被索引)的开销。

但是,如果你关心性能,你真的需要测试你的实际代码。