.NET:ArrayList与List的区别

37

在VB.NET中,ArrayList和List有什么区别?


文档链接:ArrayListList - Rory O'Kane
5个回答

49

ArrayLists基本上已经被弃用了,因为它们没有类型 - 你需要使用强制转换 - 并且对于值类型,它们比较慢且占用更少的空间,因为它们需要装箱。

泛型列表是在 .Net 2.0 中引入的,是一个更好的选择。通常情况下,List比数组更好,缺点很少。

由于这些集合是 .Net 基类库的一部分,因此这个建议也适用于 C# 以及任何支持泛型的 .Net 语言 - 不仅仅是 VB.NET。


此外,就内存使用而言,List更加高效。请参见http://blogs.msdn.com/b/joshwil/archive/2004/04/13/112598.aspx。 - PapillonUK

14

List是ArrayList的通用实现。ArrayList将所有对象存储为System.Object,您需要将其转换为适当的类型。ArrayList是异构的,而List只能存储一个类型的对象-该类型作为其泛型参数提供。

List<string> strList; // can store only strings
List<int> intList; // can store only ints
ArrayList someList; // can store anything

4
当然,从技术上讲,您始终可以创建一个存储类型为“Object”的列表,并在其中存储任何内容,因为所有东西都固有地继承自对象。 - Kibbee

5

3

ArrayList允许你编写以下代码:

Dim customers as new ArrayList
Dim c as new Customer
Dim m as new Manager
customers.Add(c)
customers.Add(m)

'This will cause an exception '  
For each c as Customer in customers
console.writeline(c.Name)
Next

一个客户列表(List)只允许包含客户类型和继承自客户的类型,因此您不能犯这样的错误。

即使您需要将不相关类型的对象放入同一集合中,使用一个对象列表(List(Of Object))是更好的选择,因为它明确表示您正在处理不同的类型。


2

List可以使用泛型,以便只能将特定类型的对象放入其中,这样可以进行额外的类型检查,并且可以减少由于装箱和拆箱而导致的处理时间。Arraylist无法使用泛型。在几乎所有情况下,您都应该使用List而不是Arraylist。


泛型是在.NET 2.0中引入的,但这些类在此之前就已经存在了。这些类在内部编写方式上有什么区别吗? - MOZILLA
除非有其他我不知道的List类,否则这是错误的。List的完整命名空间是System.Collections.Generic.List,这意味着它几乎是专门为通用类型而添加的。 - Kibbee

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