ArrayList是.NET框架中System.Collections命名空间下提供的动态数组集合类型,它解决了普通数组长度固定、无法动态调整的问题,允许开发者在运行时灵活地添加、删除元素,同时提供了丰富的操作方法简化集合操作。

ArrayList的核心特性
ArrayList内部通过数组来存储元素,当添加的元素数量超过当前数组的容量时,会自动创建一个更大的新数组,将原数组的元素复制到新数组中,这个过程对使用者是透明的。它主要有以下特性:
- 动态扩容:无需提前指定固定长度,会根据元素数量自动调整内部数组大小
- 存储任意类型:可以存储object类型的所有派生类实例,也就是支持任意类型的元素
- 丰富的操作方法:提供了Add、Remove、Insert、Contains等常用集合操作方法
- 索引访问:支持通过下标索引快速访问对应位置的元素
ArrayList的常用操作示例
以下是ArrayList的基础使用代码示例,包含创建、添加元素、遍历、删除元素等常见操作:
using System;
using System.Collections;
namespace ArrayListDemo
{
class Program
{
static void Main(string[] args)
{
// 创建ArrayList实例
ArrayList arrayList = new ArrayList();
// 添加不同类型元素
arrayList.Add(100);
arrayList.Add("测试字符串");
arrayList.Add(DateTime.Now);
// 在指定索引插入元素
arrayList.Insert(1, "插入的元素");
// 遍历ArrayList
Console.WriteLine("遍历ArrayList元素:");
foreach (object item in arrayList)
{
Console.WriteLine(item);
}
// 判断元素是否存在
bool hasNum = arrayList.Contains(100);
Console.WriteLine($"是否包含100:{hasNum}");
// 删除指定元素
arrayList.Remove("测试字符串");
// 通过索引访问元素
object firstItem = arrayList[0];
Console.WriteLine($"第一个元素:{firstItem}");
// 获取元素数量
int count = arrayList.Count;
Console.WriteLine($"当前元素数量:{count}");
}
}
}ArrayList的扩容机制
ArrayList的扩容逻辑是保证其动态特性的核心,默认情况下,当内部数组容量不足时,新容量会设置为原容量的2倍(如果2倍容量仍不够,则直接设置为所需的容量)。可以通过Capacity属性查看或设置当前ArrayList的容量,提前设置合适的容量可以减少扩容带来的性能开销。
以下是查看和设置容量的代码示例:
using System.Collections;
ArrayList list = new ArrayList();
// 查看默认初始容量
int defaultCapacity = list.Capacity;
Console.WriteLine($"默认初始容量:{defaultCapacity}");
// 添加元素触发扩容
for (int i = 0; i < 10; i++)
{
list.Add(i);
}
Console.WriteLine($"添加10个元素后的容量:{list.Capacity}");
// 手动设置容量
list.Capacity = 20;
Console.WriteLine($"手动设置后的容量:{list.Capacity}");ArrayList的优缺点分析
优点
- 使用灵活,不需要提前确定存储元素的数量
- 支持存储任意类型的元素,通用性强
- 提供了丰富的内置方法,简化集合操作
缺点
- 存储值类型时会发生装箱操作,取值时会发生拆箱操作,带来额外的性能开销
- 取出元素时需要手动进行类型转换,容易出现类型转换错误
- 相比泛型集合List<T>,类型安全性更低,不适合强类型场景
适用场景说明
ArrayList适合在需要存储多种不同类型元素、且对性能要求不高的临时场景使用。如果是存储单一类型的元素,或者项目对性能、类型安全有较高要求,更推荐使用泛型集合List<T>来替代ArrayList,避免不必要的装箱拆箱和类型转换问题。