C# Array和ArrayList有什么区别
在C#中,Array
和ArrayList
是集合类型,用于存储一组元素,但它们之间有几个关键区别:
-
类型安全:
Array
是类型安全的,意味着它只能存储一种特定类型的元素。例如,一个int[]
数组只能存储int
类型的元素。ArrayList
不是类型安全的,可以存储任何类型的对象,即它可以存储object
类型的元素。因此你可以将任何类型的对象添加到ArrayList
中,这在编译时不会报错,但可能在运行时引发类型错误。
-
性能:
Array
由于是类型安全且固定大小的,通常在性能上比ArrayList
更优,尤其是在类型转换和装箱操作方面。ArrayList
在添加元素时可能需要动态扩展其大小,这个过程涉及到内存分配和数组复制,可能会导致性能开销。
-
大小:
Array
的大小在创建时被确定,之后不能改变。ArrayList
的大小是动态的,可以随着元素的添加和移除而增长或缩小。
-
功能和方法:
Array
提供了基础的数组操作功能,例如长度查询、索引访问和迭代等。ArrayList
提供了更多的集合操作方法,如添加、删除、查找、插入和排序等。
-
泛型支持:
Array
支持泛型,但通常以非泛型的形式使用,例如int[]
、string[]
等。ArrayList
不支持泛型。如果你需要一个支持泛型的动态数组,应该使用List<T>
,它允许你创建一个类型安全的列表,例如List<int>
或List<string>
。
-
.NET版本:
Array
一直是.NET Framework的一部分。ArrayList
是早期.NET版本中的非泛型集合。自从.NET 2.0引入了泛型之后,List<T>
通常被推荐使用,因为它提供了类似ArrayList
的功能,同时增加了类型安全和更好的性能。
在实际编程中,推荐尽可能使用泛型集合,例如List<T>
,因为它们提供了类型安全和其他性能优势。ArrayList
主要是为了向后兼容保留的,新的代码中应避免使用它。
下面分别给出Array
和ArrayList
的简单示例。
首先是一个Array
的示例:
using System;
class ArrayExample
{
static void Main()
{
// 创建一个int类型的数组,并初始化
int[] intArray = new int[5] { 1, 2, 3, 4, 5 };
// 遍历数组并打印元素
for (int i = 0; i < intArray.Length; i++)
{
Console.WriteLine(intArray[i]);
}
// 修改数组的第一个元素
intArray[0] = 10;
// 打印修改后的第一个元素
Console.WriteLine("Updated first element: " + intArray[0]);
}
}
接下来是一个ArrayList
的示例:
using System;
using System.Collections;
class ArrayListExample
{
static void Main()
{
// 创建一个ArrayList
ArrayList arrayList = new ArrayList();
// 添加元素
arrayList.Add(1);
arrayList.Add("two");
arrayList.Add(3);
arrayList.Add(4.5);
// 遍历ArrayList并打印元素
foreach (object obj in arrayList)
{
Console.WriteLine(obj);
}
// 删除第一个元素
arrayList.RemoveAt(0);
// 打印删除元素后的结果
Console.WriteLine("After removal:");
foreach (object obj in arrayList)
{
Console.WriteLine(obj);
}
// 修改第一个元素,需要先进行类型转换
// 由于ArrayList不是类型安全的,我们需要确保执行正确的类型转换
if (arrayList[0] is string)
{
arrayList[0] = "two updated";
}
// 打印修改后的元素
Console.WriteLine("Updated first element: " + arrayList[0]);
}
}
在这两个示例中,我们看到了Array
和ArrayList
的基本操作。Array
示例中我们创建了一个整型数组,并初始化和修改了它的元素。在ArrayList
示例中,我们添加了不同类型的元素,演示了它的非类型安全性,并且展示了如何添加、移除和修改元素。注意,使用ArrayList
时,我们在修改或读取元素之前,可能需要进行显式的类型转换。