有关 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);
}
<小时 />现在上面的代码有什么区别?
我的问题是:
- 数组是类型安全的,并且还定义了索引大小。那么,为什么在这种情况下,许多人喜欢列表呢?(我知道它对泛型编码很有用,但我要求这种情况)
- 数组
for
循环不累积任何装箱和取消装箱,那么为什么我们需要 List? - 在这种情况下,哪个
for
循环(数组或列表)最好? - 哪个
for
循环将提供良好的性能(我认为for
两个循环都很好,因为此代码不会尝试任何装箱和取消装箱,而且此代码是类型安全的。但目前我不确定哪个更好)?
创建数组时,请指定大小。创建列表时,您不会这样做(您可以通过构造函数的重载提供初始容量)。
因此,当您创建数组时,您说它需要 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
回答您的一些问题:
- 许多人不喜欢使用索引。你很容易犯错误(特别是对于初学者)。索引是从零开始的等等...但是,如果您可以调用
.Add()
则不必担心索引。所以对于大多数人来说,使用List
有点方便 - 你不需要列表...请参阅答案 1。
- 看我的大故事...数组在内存方面要好一些。
- 两者都具有良好的性能,您不会注意到任何差异。当您开始使用更大的列表/数组时,它变得有趣。对于大小为 20 的东西,性能提升并不大。