-2

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

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

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);
}

现在上述代码之间有什么区别?

我的问题是:

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

1 回答 1

2

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

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

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

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

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

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


要解决您的一些问题:

  1. 许多人不喜欢使用索引。你很容易犯错(尤其是对于初学者来说)。索引是从零开始的等等......但是如果你可以打电话.Add(),你就不必担心索引。所以对于大多数人来说使用起来有点方便List
  2. 您不需要列表...请参阅答案1。
  3. 看我的大故事......数组在记忆方面更好一点。
  4. 两者都提供良好的性能,您不会注意到任何差异。当您开始使用更大的列表/数组时,它就会变得有趣。对于大小为 20 的东西,性能提升并不多。
于 2013-10-22T12:19:49.400 回答