有关 c# 中的数组和列表的问题

本文关键字:列表 问题 数组 有关 | 更新日期: 2023-09-27 18:36:33

我一般不是在问数组和列表之间的区别,我只是问在这种情况下它们之间的区别。

我有一个数组。数组索引是一个动态值,我有一个整数列表。

int DynamicValue=20 ;//It's any values should be coming from database or anywhere 
int[DynamicValue] array1=new int[DynamicValue];//Array declaration
List<int> list1=New List<int>();//List declaration 

现在我创建一个for循环来向数组和列表添加值:

首先在数组中添加值

for(i=0;i<DynamicValue;i++)
{
  array1[i]=i;
}

然后将值添加到列表中

for(i=0;i<DynamicValue;i++)
{
  list1.Add(i);
}
<小时 />

现在上面的代码有什么区别?

我的问题是:

  1. 数组是类型安全的,并且还定义了索引大小。那么,为什么在这种情况下,许多人喜欢列表呢?(我知道它对泛型编码很有用,但我要求这种情况)
  2. 数组for循环不累积任何装箱和取消装箱,那么为什么我们需要 List?
  3. 在这种情况下,哪个for循环(数组或列表)最好?
  4. 哪个for循环将提供良好的性能(我认为for两个循环都很好,因为此代码不会尝试任何装箱和取消装箱,而且此代码是类型安全的。但目前我不确定哪个更好)?

有关 c# 中的数组和列表的问题

创建数组时,请指定大小。创建列表时,您不会这样做(您可以通过构造函数的重载提供初始容量)。

因此,当您创建数组时,您说它需要 20 个 int 对象大小的内存。但是当你创建列表时,它没有为整数保留的大小。

List<int> list = new List<int>();
Console.WriteLine(list.Capacity);
//Output: 0

然后,当您使用循环将项目添加到数组时,数组的大小仍为 20。但是,当您对列表使用循环时,列表会看到没有空间。因此,它为4个项目(检查清单。首次添加后的容量)。然后,当容量已满时,列表将使其容量加倍。现在是8。然后是 16,然后是 32。所以最后你的列表在内存中为 32 个 int 对象保留了空间。

该数组

仅保留了 20 个,因此该数组总共在内存方面更好。

此外,在性能方面,阵列也快了一点。我指的是这个SO答案:https://stackoverflow.com/a/454923/637425


回答您的一些问题:

  1. 许多人不喜欢使用索引。你很容易犯错误(特别是对于初学者)。索引是从零开始的等等...但是,如果您可以调用.Add()则不必担心索引。所以对于大多数人来说,使用List有点方便
  2. 你不需要列表...请参阅答案 1。
  3. 看我的大故事...数组在内存方面要好一些。
  4. 两者都具有良好的性能,您不会注意到任何差异。当您开始使用更大的列表/数组时,它变得有趣。对于大小为 20 的东西,性能提升并不大。