技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

5方面比较C# ArrayList和List的异同及使用建议

作者:admin    时间:2023-5-13 11:20:21    浏览:

在本文中,我们将看到两种存储类型:ArrayListList,我将从5个方面对它们进行比较,并最后提出使用建议。

概述

ArrayList 是一种非泛型集合类型,允许用户存储任何数据类型的对象,它在System.Collections命名空间下可用。

List 是一种通用集合类型,允许用户存储声明时由 List 指定的数据类型的对象。它是一个非常强类型的集合,在System.Collections.Generic命名空间下可用。

C#中的ArrayList

ArrayList类用于在 C# 中声明一个 ArrayListArrayList在其中存储对象引用。这意味着 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

让我们尝试比较不同类别下的 ArrayListList

集合性质

从本质上讲,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 是一个强类型集合,它允许定义TList<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 是类型安全的,我们根本不需要进行任何类型转换。

内存管理

通常,ListArrayList 更节省内存,因为它不必为集合中的每个元素存储对象引用。相反,它将元素直接存储在数组中。而 ArrayList 将元素存储在内部数组中,并且当我们增加数组大小时需要分配额外的内存。

性能效率

从我们目前所看到的来看,ListArrayList 的内存效率更高。此外,类型安全使其比 ArrayList 的性能更高效。与 ArrayList 相比, List 具有更好的 API 支持,并且通过它提供的方法和属性可以更快地访问元素。参阅文章:

使用偏好

正如我们现在所知,ArrayList 可以灵活地存储任何数据类型的对象,因此如果类型安全确实不是问题,我们可以使用它。此外,如果我们正在开发的应用程序的目标是 .NET Framework 版本.NET 2.0 或更低版本,我们可以继续使用 ArrayList。但是,如果我们正在使用等于或高于 .NET 3.0 的框架,我们总是可以更喜欢 List 而不是 ArrayList,原因有很多,我们在前面的部分已经看到了。 

使用 ArrayList 和 List 时的建议

到目前为止,我们已经可以看到我们可以使用这两个集合来执行类似的功能。然而 ListArrayList 的更新更好的版本。

俗话说——新的总是更好的。对于任何新的开发,List 应该始终是我们的首选。其实微软也是这么建议的。仅当应用程序仍以低于 .NET 3.0 的框架为目标或绝对必要时,我们才可以使用 ArrayList

总结

在本文中,我们了解了 ArrayListList 以及何时使用它们。很明显,List 在任何比较中都胜过 ArrayList,因为它更高效、更好且类型安全。 

相关文章

标签: CSharp  ArryList  List方法  
x
  • 站长推荐
/* 左侧显示文章内容目录 */