C# - ArrayList
在 C# 中,`ArrayList` 是一个非泛型对象集合,其大小会动态增加。它与 Array 相同,只是其大小会动态增加。
`ArrayList` 可用于添加未知数据,您不知道数据的类型和大小。
创建 ArrayList
`ArrayList` 类包含在 `System.Collections` 命名空间中。使用 `new` 关键字创建 `ArrayList` 对象。
using System.Collections;
ArrayList arlist = new ArrayList();
// or
var arlist = new ArrayList(); // recommended
在 ArrayList 中添加元素
使用 `Add()` 方法或对象初始化器语法向 `ArrayList` 中添加元素。
一个 `ArrayList` 可以包含多个 `null` 和重复值。
// adding elements using ArrayList.Add() method
var arlist1 = new ArrayList();
arlist1.Add(1);
arlist1.Add("Bill");
arlist1.Add(" ");
arlist1.Add(true);
arlist1.Add(4.5);
arlist1.Add(null);
// adding elements using object initializer syntax
var arlist2 = new ArrayList()
{
2, "Steve", " ", true, 4.5, null
};
使用 `AddRange(ICollection c)` 方法将整个 Array、HashTable、SortedList、`ArrayList`、`BitArray`、Queue 和 Stack 添加到 `ArrayList` 中。
var arlist1 = new ArrayList();
var arlist2 = new ArrayList()
{
1, "Bill", " ", true, 4.5, null
};
int[] arr = { 100, 200, 300, 400 };
Queue myQ = new Queue();
myQ.Enqueue("Hello");
myQ.Enqueue("World!");
arlist1.AddRange(arlist2); //adding arraylist in arraylist
arlist1.AddRange(arr); //adding array in arraylist
arlist1.AddRange(myQ); //adding Queue in arraylist
访问 ArrayList
`ArrayList` 类实现了 `IList` 接口。因此,可以使用索引器访问元素,方式与数组相同。索引从零开始,每个后续元素增加一。
需要显式转换为适当的类型,或使用 var 变量。
var arlist = new ArrayList()
{
1,
"Bill",
300,
4.5f
};
//Access individual item using indexer
int firstElement = (int) arlist[0]; //returns 1
string secondElement = (string) arlist[1]; //returns "Bill"
//int secondElement = (int) arlist[1]; //Error: cannot cover string to int
//using var keyword without explicit casting
var firstElement = arlist[0]; //returns 1
var secondElement = arlist[1]; //returns "Bill"
//var fifthElement = arlist[5]; //Error: Index out of range
//update elements
arlist[0] = "Steve";
arlist[1] = 100;
//arlist[5] = 500; //Error: Index out of range
迭代 ArrayList
`ArrayList` 实现了支持集合类型迭代的 ICollection 接口。因此,使用 `foreach` 和 `for` 循环迭代 `ArrayList`。`ArrayList` 的 `Count` 属性返回 `ArrayList` 中元素的总数。
ArrayList arlist = new ArrayList()
{
1,
"Bill",
300,
4.5F
};
foreach (var item in arlist)
Console.Write(item + ", "); //output: 1, Bill, 300, 4.5,
for(int i = 0 ; i < arlist.Count; i++)
Console.Write(arlist[i] + ", "); //output: 1, Bill, 300, 4.5,
在 ArrayList 中插入元素
使用 `Insert()` 方法在 `ArrayList` 的指定索引处插入元素。
签名:`void Insert(int index, Object value)`
ArrayList arlist = new ArrayList()
{
1,
"Bill",
300,
4.5f
};
arlist.Insert(1, "Second Item");
foreach (var val in arlist)
Console.WriteLine(val);
使用 `InsertRange()` 方法在 `ArrayList` 的指定索引处插入一个集合。
签名:`Void InsertRange(int index, ICollection c)`
ArrayList arlist1 = new ArrayList()
{
100, 200, 600
};
ArrayList arlist2 = new ArrayList()
{
300, 400, 500
};
arlist1.InsertRange(2, arlist2);
foreach(var item in arlist1)
Console.Write(item + ", "); //output: 100, 200, 300, 400, 500, 600,
从 ArrayList 中删除元素
使用 `Remove()`、`RemoveAt()` 或 `RemoveRange` 方法从 `ArrayList` 中删除元素。
ArrayList arList = new ArrayList()
{
1,
null,
"Bill",
300,
" ",
4.5f,
300,
};
arList.Remove(null); //Removes first occurance of null
arList.RemoveAt(4); //Removes element at index 4
arList.RemoveRange(0, 2);//Removes two elements starting from 1st item (0 index)
检查 ArrayList 中的元素
使用 `Contains()` 方法判断指定元素是否存在于 `ArrayList` 中。如果存在则返回 true,否则返回 false。
ArrayList arList = new ArrayList()
{
1,
"Bill",
300,
4.5f,
300
};
Console.WriteLine(arList.Contains(300)); // true
Console.WriteLine(arList.Contains("Bill")); // true
Console.WriteLine(arList.Contains(10)); // false
Console.WriteLine(arList.Contains("Steve")); // false
ArrayList 类
下图说明了 `ArrayList` 类。

ArrayList 属性
属性 | 描述 |
---|---|
容量 | 获取或设置 ArrayList 可包含的元素数量。 |
计数 | 获取 ArrayList 中实际包含的元素数量。 |
IsFixedSize | 获取一个值,指示 ArrayList 是否具有固定大小。 |
IsReadOnly | 获取一个值,指示 ArrayList 是否为只读。 |
项 | 获取或设置指定索引处的元素。 |
ArrayList 方法
方法 | 描述 |
---|---|
Add()/AddRange() | Add() 方法在 ArrayList 的末尾添加单个元素。 AddRange() 方法将指定集合中的所有元素添加到 ArrayList 中。 |
Insert()/InsertRange() | Insert() 方法在 ArrayList 的指定索引处插入单个元素。 InsertRange() 方法从 ArrayList 的指定索引开始插入指定集合的所有元素。 |
Remove()/RemoveRange() | Remove() 方法从 ArrayList 中删除指定元素。 RemoveRange() 方法从 ArrayList 中删除一系列元素。 |
RemoveAt() | 从 ArrayList 中删除指定索引处的元素。 |
Sort() | 对 ArrayList 的所有元素进行排序。 |
Reverse() | 反转整个 ArrayList 中元素的顺序。 |
Contains | 检查指定元素是否存在于 ArrayList 中。如果存在则返回 true,否则返回 false。 |
Clear | 删除 ArrayList 中的所有元素。 |
CopyTo | 将所有元素或一系列元素复制到兼容的 Array 中。 |
GetRange | 从 ArrayList 的指定索引处返回指定数量的元素。 |
IndexOf | 搜索指定元素,如果找到则返回从零开始的索引。如果未找到元素则返回 -1。 |
ToArray | 从 ArrayList 返回兼容的数组。 |
- Array 与 ArrayList 的区别
- ArrayList 的方法和属性