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

本文关键字:何工作 工作 列表 是什么 | 更新日期: 2023-09-27 18:06:59

如果我在网上搜索"c++ list",我就会得到一个很好的关于c++中list是如何工作的总结,以及它的优点/缺点,等等。然而,我在c#中找不到相同的结果。据我所知,名字列表并没有说明它是如何实现的,它可以在很大程度上改变语言中的列表。

我需要在许多文件加载大量的数据到一个数组中,以便快速随机访问所有数据。然而,它的数据太多了,c#找不到足够大的连续内存块。所以我要创建一个抽象,它可以将许多数组作为一个整体。它将有一个indexer属性,可以查看如何访问正确的数组。

然而,然后我想,是不是一个列表实际上是如何在c#中工作的?关于c#中的列表,我所知道的,或者至少认为,它们不像链表那样工作,在链表中,没有办法访问随机元素,只能从前一个元素或从它后面的元素访问。

我能知道这件事的详细情况吗?

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

回答你最初的查询- 'List'是由c#中的数组支持的

从MSDN:

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

List是"a Homogeneous, self - resizing Array"

这篇文章很好,也许就是你想要的。

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

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

建议:如果你对文件大小有限制,也许你可以使用字典将文件与它们的内容联系起来,并使用规范的文件路径作为键,并将内容存储在列表中。这也许对你有用。

我认为这是一个非常好的定义,来自c# 5.0的概要书

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