0

我纯粹出于好奇而问这个问题。我没有任何实际的代码可以思考。

是否存在使用锯齿状数组而不是列表列表的最佳情况,反之亦然?

4

3 回答 3

4

aList<T> 一个数组,只是 a 包装在一个类中,因此它可以随意重新分配和调整大小。因此,否则两者之间的性能可以认为是相同的 - 仅List<List<T>>在需要调整任一维度的大小时使用 - 不要忘记,无论何时调整第 0 维度的大小,都需要在第 1 维度中构建新实例,这可能会很昂贵。

您忘记了 n 维数组(即T[,])。然而,由于 .NET 边界检查的一个怪癖,这些实际上比锯齿状数组或一维用户管理的数组要慢,这完全是个谜。

于 2012-09-25T22:00:05.963 回答
2

锯齿状数组和列表列表与普通列表和数组具有相同的相对优点:

a 的主要优点List<T>是你可以扩大和缩小它。然而,它可能会在内存中占用大量额外空间,因为它通常会在其后备存储中保留一堆额外空间,这样它就不必在每次增长时重新分配一个新数组。

数组的主要优点是它很紧凑——它有足够的空间来存储其中的元素数量,仅此而已。但它的大小是静态的;如果您需要向其中添加新项目,则必须替换现有项目或手动创建更大的数组并将数据复制到其中。

就速度而言,在任何实际范围内,它们的行为都应该相同。 List<T>使用数组作为其后备存储,因此由于额外的间接层,它可能比等效数组稍慢。但我不会假设如果没有仔细测量 - 它是否以及在多大程度上会随着框架或 CLR 的不同版本而改变。

于 2012-09-25T22:03:57.773 回答
1

我会说 aList<T>更灵活,而 asT[]更具互操作性。例如,如果我想构建一个未知大小的列表,我会使用List<T>. 如果我从 Web 服务返回列表,我会使用T[].

我知道我在这里指的是单维列表,但同样的做法也适用于多维。

于 2012-09-25T22:09:37.627 回答