2

如果我在网上搜索“c++ 列表”,我会很好地总结 c++ 中的列表如何工作,以及它的优点/缺点等。但是我在 C# 中找不到相同的。据我所知,名单并没有说明它是如何实现的,而且它在语言中的实际情况可能会有很大差异。

我需要将大量包含大量数据的文件加载到一个数组中,以便快速随机访问所有数据。但是它的数据太多,c# 找不到足够大的连续内存块。所以我打算创建一个包含许多数组并作为一个数组的抽象。它将有一个索引器属性,可以查看有关访问正确数组的信息。

但是后来我想,这不是列表在 c# 中的实际工作方式吗?我所知道的关于 c# 中列表的所有信息,或者至少认为,它们不像链表那样工作,在链表中无法访问随机元素,只能从前一个元素或可能从它后面的元素访问。

我能得到关于这件事的一些细节吗?

4

2 回答 2

8

要回答您的初始查询 - 'List' 由 c# 中的数组支持

来自 MSDN:

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

List 是“一个同构的、自修正维度的数组

这篇文章非常好,也许你正在寻找什么。

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

但我觉得“列表”不是您在这里寻找的解决方案。

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

于 2013-04-02T16:04:47.667 回答
2

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

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

于 2013-04-02T16:03:25.523 回答