什么是C#中的列表,它是如何工作的?

时间:2013-04-02 15:58:12

标签: c#

如果我在网上搜索“c ++ list”,我会很好地总结c ++中的列表如何工作,以及它的好处/缺点等。但是我找不到相同的C#。据我所知,名单没有说明它是如何实现的,它可以在列表实际上是一种语言中变化很大。

我需要将大量数据加载到最好的一个数组中,以便快速随机访问所有数据。然而,它太多的数据和c#无法找到足够大的连续内存块。所以我打算创建一个抽象,它占用了很多数组,并且可以作为一个数组。它将有一个索引器属性,可以看到访问正确的数组。

然而我想,这不是一个列表在c#中实际起作用的方式吗?我所知道的关于c#中的列表,或者至少认为,它们不像链接列表那样工作,因为它无法访问随机元素,而是来自前一个元素,或者可能来自之后的元素。

我能否详细了解这件事?

2 个答案:

答案 0 :(得分:4)

要回答您的初始查询,'列表'由c#中的数组支持

来自MSDN:

http://msdn.microsoft.com/en-us/library/ms379570(v=vs.80).aspx#datastructures20_1_topic5

列表是“同构,自我红色数组

文章非常好,也许你正在寻找。

Imp: c#中的List由数组支持,因此理论上的大小限制将是支持它的数组的限制。此外,当使用列表时,如果您确定要将其增长到一定的大小,那么将初始容量设置得足够大以优化性能将是一个好主意。

但我有一种感觉'列表'不是你在这里寻找的解决方案。

建议:也许如果您对文件大小有限制,您可以使用将文件键入其内容的词典,并使用规范文件路径作为内容存储在列表中的键。这可能对你有用。

答案 1 :(得分:1)

我认为这是一个非常好的定义,简单来自C#5.0

  

在内部,List和ArrayList通过维护内部工作   对象数组,在达到容量时用更大的数组替换。   附加元素是有效的(因为通常有一个空闲插槽   结束),但插入元素可能很慢(因为所有元素之后   必须移动插入点以形成空闲插槽。和。一样   数组,如果在a上使用BinarySearch方法,搜索是有效的   已排序的列表,但由于每个列表都是低效的   必须单独检查项目。