C# 关于c语言中数组和列表的问题# 一般来说,我不是问数组和列表之间的区别,我只是问在这个场景中它们之间的区别。

C# 关于c语言中数组和列表的问题# 一般来说,我不是问数组和列表之间的区别,我只是问在这个场景中它们之间的区别。,c#,arrays,performance,list,collections,C#,Arrays,Performance,List,Collections,我有一个数组。数组索引是一个动态值,我有一个整数列表 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 //然后将这

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

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(i=0;i创建数组时指定大小。创建列表时不指定大小(可以通过构造函数重载提供初始容量)

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

List<int> list = new List<int>();
Console.WriteLine(list.Capacity);
//Output: 0
List List=新列表();
控制台写入线(列表容量);
//输出:0
然后,当您使用循环将项目添加到数组中时,数组的大小保持为20。但是当您使用循环添加列表时,列表看到没有空间。因此它为4个项目创建了空间(检查列表。首次添加后的容量)。然后当容量满时,列表的容量将加倍。现在是8。然后是16,然后是32。因此,最后,列表在内存中为32个int对象保留了空间

该阵列只保留了20个,因此总体而言,该阵列在内存方面更好

此外,就性能而言,阵列速度也快了一点。我指的是这样一个答案:


回答您的一些问题:

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

  • @曼斯菲尔德:谢谢你的编辑,先生!没问题。我知道你想礼貌一点,但下次尽量避免添加太多与问题无关的信息-当问题变得杂乱无章时,会让人们更容易接近,因为他们无法理解-即使这是个好问题!他们确实有你的想法。你可以将该问题中解释的所有要点应用于任何场景。您的场景在可接受的答案中用这一行来回答:“如果您知道数据是固定长度的,并且出于某些非常具体的原因(在基准测试之后)希望进行微优化,那么阵列可能会很有用。”。重点是-在数据库调用后,您将填充数组或列表,这将需要几十毫秒(如果不是几百毫秒)才能完成。在这之后,您是否需要一微秒来初始化数组或两微秒来初始化列表真的不再重要了。关于“装箱和取消装箱”,这不会发生,因为与java不同,C#可以在值类型上有泛型。这一部分在副本中没有涉及,所以我想我至少应该回答这个问题。谢谢你的回答,我明白了!!@RameshRajendran在一次编辑中回答了所有问题
    for(i=0;i<DynamicValue;i++)
    {
      list1.Add(i);
    }
    
    List<int> list = new List<int>();
    Console.WriteLine(list.Capacity);
    //Output: 0