数组、ArrayList和List有什么区别?

46

我想知道数组ArrayListList之间的确切区别(因为它们都具有类似的概念),以及何时使用其中一个而不是另一个。

例如:

数组
对于数组,我们只能添加在声明中声明的类型,例如int

int[] Array = new Int[5]; //Instansiation of an array
for(int i = 0; i < Array.Length; i++)
{
   Array[i] = i + 5; //Add values to each array index
}

ArrayList
就像Array一样,我们可以添加值。

ArrayList arrayList = new ArrayList();
arrayList.Add(6);
arrayList.Add(8);

列表
与数组一样,我们可以添加值

List<int> list = new List<int>();
list.Add(6);
List.Add(8);

我知道在List中,你可以拥有泛型,因此你可以传递任何类型,但在Array中无法实现,但我的确切问题是:

  • 在哪种情况下会使用其中之一?
  • 它们的功能上的确切区别是什么?

ArrayList和List在https://dev59.com/0XE95IYBdhLWcg3wb9db(作为重复内容)中有所涉及,Array vs. ArrayList在https://dev59.com/eHRC5IYBdhLWcg3wFdFx中有所涉及。如果这两个问题不能解决您所有的疑问,请明确说明您需要什么新信息,并创建新问题。请确保先搜索现有问题-https://www.bing.com/search?q=C%23+array+vs+arraylist - Alexei Levenkov
1
噢,是的,对不起。我正在学习这个网站的操作规则。谢谢,以后会更多地浏览。 - kCC
1个回答

115

它们是不同的对象类型。它们具有不同的功能并以不同的方式存储其数据。

数组(System.Array)一旦分配大小就会固定,无法添加或删除项。此外,所有元素必须是相同类型的。因此,它是类型安全的,并且在内存和性能方面都是三种中最高效的。此外,System.Array支持多个维度(即具有属性),而List和ArrayList则没有(尽管可以创建列表的列表或ArrayList的ArrayList)。

ArrayList是一个灵活的数组,其中包含对象列表。您可以向其中添加和删除项,它会自动处理空间分配。如果在其中存储值类型,则它们将被装箱和拆箱,这可能有点低效。此外,它不是类型安全的。

List<>利用泛型;它本质上是ArrayList的类型安全版本。这意味着没有装箱或拆箱(这提高了性能),如果您尝试添加错误类型的项目,它会生成编译时错误。


完美的答案! - Mahsa Alamdari
ArrayList继承自AbstractList并实现了List接口。或者是指其他的列表? - Yan
1
@Yan 这是Java。这个问题是关于c#的。 - John Wu
@JohnWu,哦,我明白了,是我的错误,抱歉。 - Yan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接