C# ArrayList:动态数组

在 C# 中,动态数组(ArrayList)代表了可被单独索引的对象的有序集合。动态数组基本上可以代替数组,唯一与数组不同的是,动态数组可以使用索引在指定的位置添加和移除指定的项目,动态数组会自动重新调整自身的大小。另外,动态数组允许在列表中进行动态内存分配、增加、搜索、排序等操作。

ArrayList 类中的属性

在 C# 中想要创建动态数组需要使用 ArrayList 类,下表中列出了 ArrayList 类中的常用属性:

属性 描述
Capacity 获取或设置动态数组中可以包含的元素个数
Count 获取动态数组中实际包含的元素个数
IsFixedSize 判断动态数组是否具有固定大小
IsReadOnly 判断动态数组是否只读
IsSynchronized 判断访问动态数组是否同步(线程安全)
Item[Int32] 获取或设置指定索引处的元素
SyncRoot 获取一个对象用于同步访问动态数组

ArrayList 类中的方法

下表中列出了 ArrayList 类中的常用方法:

方法名 描述
public virtual int Add(object value) 将对象添加到动态数组的末尾
public virtual void AddRange(ICollection c) 将 ICollection 的元素添加到动态数组的末尾
public virtual void Clear() 从动态数组中移除所有的元素
public virtual bool Contains(object item) 判断某个元素是否在动态数组中
public virtual ArrayList GetRange(int index, int count) 返回一个动态数组,表示源动态数组中元素的子集
public virtual int IndexOf(object) 搜索整个动态数组,并返回对象在动态数组中第一次出现的索引,索引从零开始
public virtual void Insert(int index, object value) 在动态数组的指定索引处插入一个元素
public virtual void InsertRange(int index, ICollection c) 在动态数组的指定索引处插入某个集合的元素
public virtual void Remove(object obj) 从动态数组中移除指定的对象
public virtual void RemoveAt(int index) 移除动态数组中指定索引处的元素
public virtual void RemoveRange(int index, int count) 从动态数组中移除某个范围的元素
public virtual void Reverse() 逆转动态数组中元素的顺序
public virtual void SetRange(int index, ICollection c) 复制某个集合的元素到动态数组中某个范围的元素上
public virtual void Sort() 对动态数组中的元素进行排序
public virtual void TrimToSize() 将容量设置为动态数组中元素的实际个数

关于 ArrayList 类中的完整属性和方法介绍,可以查阅 C# 官方文档

【示例】下面通过示例演示 ArrayList 类中属性和方法的使用:
using System;
using System.Collections;

namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args){
            ArrayList arr_list = new ArrayList();

            Console.WriteLine("以 Num1,Num2,Num3,...,Numn 的形式输入一个字符串:");
            string str = Console.ReadLine();
            string[] strArray = str.Split(',');
            foreach(string s in strArray){
                arr_list.Add(s);
            }
          
            Console.WriteLine("Capacity: {0} ", arr_list.Capacity);
            Console.WriteLine("Count: {0}", arr_list.Count);
                    
            Console.Write("Content: ");
            foreach (string i in arr_list)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.Write("Sorted Content: ");
            arr_list.Sort();
            foreach (string i in arr_list)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
运行结果如下:

以 Num1,Num2,Num3,...,Numn 的形式输入一个字符串:
213,443,11,456,23,113,56,89,23
Capacity: 16
Count: 9
Content: 213 443 11 456 23 113 56 89 23
Sorted Content: 11 113 213 23 23 443 456 56 89