C# - 数组列表(ArrayList)

本文关键字:ArrayList 列表 数组 | 更新日期: 2023-09-12 17:39:21

在 C# 中,ArrayList 是大小动态增加的对象的非泛型集合。它与Array相同,只是它的大小是动态增加的。

ArrayList可用于添加未知数据,其中您不知道数据的类型和大小。

创建数组列表

包含在 System.Collections 命名空间中的ArrayList类。使用 new 关键字创建ArrayList的对象。

Example: Create an ArrayList

using System.Collections;
ArrayList arlist = new ArrayList(); 
// or 
var arlist = new ArrayList(); // recommended 

在 ArrayList中添加元素

使用 Add() 方法或 object 初始值设定项语法在ArrayList中添加元素。

一个ArrayList可以包含多个null和重复值。

Example: Adding Elements in ArrayList

// 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) 方法添加

ArrayHashTableSortedListArrayListBitArrayQueue, 和 Stack in the ArrayList .

Example: Adding Entire Array/ArrayList into 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 

Access an ArrayList

ArrayList类实现IList接口。因此,可以使用索引器以与数组相同的方式访问元素。索引从零开始,每个后续元素增加 1。

需要显式转换为适当的类型,或使用var 变量。

Example: Accessing Elements of ArrayList

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

Iterate an ArrayList

ArrayList实现ICollection 接口,该接口支持集合类型的迭代。因此,使用 foreachfor 循环来迭代ArrayListArrayListCount 属性返回ArrayList中的元素总数。

Example: Iterate 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, 

Insert elements in ArrayList

使用 Insert() 方法将指定索引处的元素插入到ArrayList中。

签名:void Insert(int index, Object value)

Example: Insert Element in ArrayList

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)

Example: Insert Collection in ArrayList

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, 

Remove Elements from ArrayList

使用 Remove()RemoveAt()RemoveRange 方法从ArrayList中删除元素。

Example: Remove Elements from 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。

Example: Check for Elements

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 类。相反,请使用List<object>来存储异类对象。要存储相同数据类型的数据,请使用 Generic List<T>

ArrayList class

下图说明了ArrayList类。

C# ArrayList

ArrayList Properties

PropertiesDescription
Capacity获取或设置 ArrayList 可以包含的元素数。
Count获取数组列表中实际包含的元素数。
IsFixedSize获取一个值,该值指示 ArrayList 是否具有固定大小。
IsReadOnly获取一个值,该值指示 ArrayList 是否为只读。
Item获取或设置指定索引处的元素。

ArrayList Methods

MethodsDescription
Add()/AddRange() Add() 方法在 ArrayList 的末尾添加单个元素。
AddRange() 方法将指定集合中的所有元素添加到 ArrayList 中。
Insert()/InsertRangeInsert() 方法在 ArrayList 中的指定索引处插入单个元素。
InsertRange() 方法从 ArrayList 中的指定索引开始插入指定集合的所有元素。
Remove()/RemoveRangeRemove() 方法从 ArrayList 中删除指定的元素。
RemoveRange() 方法从 ArrayList 中删除一系列元素。
RemoveAt()从 ArrayList 中删除指定索引处的元素。
sort()对数组列表的整个元素进行排序。
Reverse()反转整个 ArrayList 中元素的顺序。
contains检查指定的元素是否存在于数组列表中。 如果存在,则返回 true,否则返回 false。
Clear删除数组列表中的所有元素。
CopyTo将所有元素或元素范围复制到可兼容的数组中。
GetRange从 ArrayList 的指定索引返回指定数量的元素。
IndexOfSearch 指定元素,如果找到,则返回从零开始的索引。如果未找到元素,则返回 -1。
ToArray从 ArrayList 返回可兼容数组。