5方面比较C# ArrayList和List的异同及使用建议
作者:admin 时间:2023-5-13 11:20:21 浏览:在本文中,我们将看到两种存储类型:ArrayList
和 List
,我将从5个方面对它们进行比较,并最后提出使用建议。
概述
ArrayList
是一种非泛型集合类型,允许用户存储任何数据类型的对象,它在System.Collections
命名空间下可用。
List
是一种通用集合类型,允许用户存储声明时由 List
指定的数据类型的对象。它是一个非常强类型的集合,在System.Collections.Generic
命名空间下可用。
C#中的ArrayList
ArrayList
类用于在 C# 中声明一个 ArrayList。ArrayList
在其中存储对象引用。这意味着 ArrayList
可以在其中存储多种数据类型的数据,如整数、字符串、浮点数等。下面的代码示例向我们展示了如何在 C# 中初始化 ArrayList
。
ArrayList array1 = new ArrayList();
array1.Add(1);
array1.Add("Pony");
foreach (var x in array1)
{
Console.WriteLine(x);
}
输出
1
Pony
在上面的代码中,我们创建了ArrayList
类的实例:array1
,并在其中存储了不同数据类型的不同值。
C#中的List
通用列表用于保存 C# 中一种特定数据类型的数据。List
类用于在 C# 中声明特定数据类型的列表。我们需要在声明时指定列表的数据类型。下面的代码示例向我们展示了如何在 C# 中初始化 List
。
List<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
foreach (var x in list1 )
{
Console.WriteLine(x);
}
输出
1
2
在上面的代码中,我们创建了List
类的实例:list1
,它包含整数数据类型和存储的整数值。
比较 ArrayList 和 List
让我们尝试比较不同类别下的 ArrayList
和 List
。
集合性质
从本质上讲,ArrayList
包含一个异构的对象集合,这意味着在 ArrayList
的单个实例中,我们可以存储任何数据类型的对象。而 List
被设计为仅保存同类对象的集合,这意味着在单个实例中,我们只能存储一种数据类型的对象。
让我们看一个 ArrayList
存储不同对象类型的例子:
using System.Collections;
var arrayList = new ArrayList();
arrayList.Add(1); // integer
arrayList.Add(2);
arrayList.Add("3"); // string
现在让我们看一个关于 List
的例子,它只允许一种对象:
using System.Collections.Generic;
var list = new List<int>();
list.Add(1); // allows only integer values
list.Add(2);
list.Add(3);
容易出错
使用 ArrayList
,在访问存储异构对象的集合时,我们总是可以预料到运行时错误。但是 List
是一个强类型集合,它允许定义T为List<T>
,因此,如果我们试图存储为T指定的以外的任何内容,应用程序将抛出编译时错误。
现在,使用相同的list
实例,如果我们尝试添加一个字符串,我们将面临编译错误:
list.Add("4"); // 抛出编译时错误
装箱/拆箱需求
我们在使用 ArrayList
时,经常需要我们对正在访问的对象进行装箱或拆箱,以避免出现任何错误。但是对于 List
,情况绝非如此。
让我们看看如何:
int sum = 0;
foreach (var item in arrayList)
{
sum += Convert.ToInt32(item);
}
Console.WriteLine($"Sum is {sum}");
输出
Sum is 6
正如我们在 ArrayList
中看到的那样,我们必须使用Convert.ToInt32()
转换"3"为3,才能使计算正常进行并避免运行时错误。
但对于 List
,我们不需要这样做:
int sum = 0;
foreach (var item in list)
{
sum += item;
}
Console.WriteLine($"Sum is {sum}");
输出仍然是一样的:
Sum is 6
正如我们所看到的,List
是类型安全的,我们根本不需要进行任何类型转换。
内存管理
通常,List
比 ArrayList
更节省内存,因为它不必为集合中的每个元素存储对象引用。相反,它将元素直接存储在数组中。而 ArrayList
将元素存储在内部数组中,并且当我们增加数组大小时需要分配额外的内存。
性能效率
从我们目前所看到的来看,List
比 ArrayList
的内存效率更高。此外,类型安全使其比 ArrayList
的性能更高效。与 ArrayList
相比, List
具有更好的 API 支持,并且通过它提供的方法和属性可以更快地访问元素。参阅文章:
使用偏好
正如我们现在所知,ArrayList
可以灵活地存储任何数据类型的对象,因此如果类型安全确实不是问题,我们可以使用它。此外,如果我们正在开发的应用程序的目标是 .NET Framework 版本.NET 2.0 或更低版本,我们可以继续使用 ArrayList
。但是,如果我们正在使用等于或高于 .NET 3.0 的框架,我们总是可以更喜欢 List
而不是 ArrayList
,原因有很多,我们在前面的部分已经看到了。
使用 ArrayList 和 List 时的建议
到目前为止,我们已经可以看到我们可以使用这两个集合来执行类似的功能。然而 List
是 ArrayList
的更新更好的版本。
俗话说——新的总是更好的。对于任何新的开发,List
应该始终是我们的首选。其实微软也是这么建议的。仅当应用程序仍以低于 .NET 3.0 的框架为目标或绝对必要时,我们才可以使用 ArrayList
。
总结
在本文中,我们了解了 ArrayList
和 List
以及何时使用它们。很明显,List
在任何比较中都胜过 ArrayList
,因为它更高效、更好且类型安全。
相关文章
- 站长推荐