我有一个数组。数组索引是一个动态值,我有一个整数List。
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
循环来向Array和List添加值:
//首先在数组中添加值
for(i=0;i<DynamicValue;i++)
{
array1[i]=i;
}
//然后将值添加到列表
for(i=0;i<DynamicValue;i++)
{
list1.Add(i);
}
现在上述代码有什么区别?
我的问题是:
for
循环没有产生任何装箱和拆箱,那么为什么我们需要List呢? for
循环(数组或列表)最佳 ?for
循环会提供良好的性能(我认为两个for
循环都很好,因为此代码不会尝试任何装箱和拆箱,而且这些代码也是类型安全的。但我是目前还不确定哪一个更好?)答案 0 :(得分:2)
创建阵列时,请指定大小。当您创建列表时,您没有(您可以提供构造函数重载的初始容量)。
因此,当您创建数组时,您说它需要20个int对象大小的内存。但是当你创建List时,它没有为整数保留大小。
List<int> list = new List<int>();
Console.WriteLine(list.Capacity);
//Output: 0
然后,当您使用循环向数组添加项目时,数组的大小仍为20.但是当您使用循环列表时,列表看到没有空间。因此它为4个项目创建了空间(检查list.Capacity在首次添加后)。然后,当容量已满时,列表将使其容量翻倍。现在它是8.然后再次16,然后再次32.所以最后你的列表在内存中为32个int对象保留了空间。
这个数组只保留了20个,所以整个数组的内存更好。
此外,性能方面,阵列也快一点。我指的是这个答案:https://stackoverflow.com/a/454923/637425
要解决您的一些问题:
.Add()
,你不必担心索引。因此,大多数人使用List