C# ArrayList简介

本文参考自《C#入门经典(第八版)》

ArrayList的概述

我们知道的普通数组System.Array类实际上是集合类(Collection Class)的一种类型。集合类一般用于处理对象列表,其功能比简单数组要多,功能大多是通过实现System.Collections名称空间中的接口而获得的。而System.Collections.ArrayList类(以下简称ArrayList类)就是这样一种类,可以实现比Array类更多的功能。

//在vs中通过按住Alt左键点击ArrayList可以看到
namespace System.Collections
{
    public class ArrayList : IList, ICollection, IEnumerable, ICloneable
    {
        ......
    }
}

可以看到ArrayList类使用了IList, ICollection, IEnumerable, ICloneable这四个接口。这几个接口定义在System.Collections名称空间下。这些接口为类提供了基本的集合功能。
在说明ArrayList的功能之前,有必要了解一下这几个接口。

  • IEnumerable——可以迭代(遍历)集合中的项(元素)。
  • ICollection——继承于IEnumerable。可以获取集合中项的个数,并能把项复制到一个简单的数组类型中。
  • IList——继承于ICollection和IEnumerable。提供了集合的项列表,允许访问这些项,并提供其他一些与项列表相关的基本功能。
  • ICloneable——克隆的支持,将创建的类的新实例得到与现有实例相同的值。
    ##ArrayList的使用
    注意:ArrayList里的元素都是System.Object类型的。

ArrayList类实现了上述接口,但实现方式比System.Array类更复杂。这个类可用于表示可变大小的数组(或者称为集合)。接下来将简单介绍使用方法。
使用ArrayList前,需要添加System.Collections名称空间。
using System.Collections;
#####创建一个ArrayList
ArrayList的构造函数有三个重载,下面逐一说明。
默认的构造函数是这样的:

ArrayList arrayListTest = new ArrayList();

可以发现,ArrayList不像普通数组那样需要指定数组的大小。
第二个构造函数:

ArrayList arrayListTest = new ArrayList(5);
//这样创建的ArrayList默认有五个元素的容量,但这并不是绝对容量。

第三个构造函数是这样的:

public ArrayList(ICollection c);
//初始化 System.Collections.ArrayList 类的新实例,该类包含从指定集合复制的元素,并具有与复制的元素数相同的初始容量。
//参数c:其元素已复制到新列表的 System.Collections.ICollection。

可以看到c是一个ICollection类型的变量。也就是说,使用了ICollection接口的类的实例都可以当做参数c(没错,普通数组Array也可以,因为Array也使用了ICollection接口)。

所以我们可以这么用:

ArrayList arrayListTest2 = new ArrayList(arrayListTest);
//这样创建直接复制了arrayListTest集合

还可以这么用:

int[] intTest = new int[5] { 1, 2, 3, 4, 5 };
ArrayList arrayListTest2 = new ArrayList(intTest);

#####给ArrayList添加元素
不像普通数组定义出来后就有了大小,ArrayList刚创建时是空的(一个元素都没有,除非你不是用的默认构造函数)。那么我们就需要给ArrayList添加元素了。添加元素需要使用ArrayList里的一个方法:

public virtual int Add(object value);
//将value对象添加到ArrayList的结尾处。返回值为添加到ArrayList里的value的索引。

使用示例:

ClassTest classTestObject = new ClassTest();
arrayListTest.Add(classTestObject);
或者把以上两行代码二合一:
arrayListTest.Add(new ClassTest());

Add()方法只能在末尾添加一个元素。因此可以使用另一个方法一次性添加多个元素:

public virtual void AddRange(ICollection c);
//将 ICollection 的元素添加到 System.Collections.ArrayList 的末尾。

ICollection接口已在上文介绍,这里不再赘述。
给ArrayList添加元素后,ArrayList的长度(容量)就会自动增加。但是和Array不一样的是,读取ArrayList的长度需要使用ArrayList的Count属性。

Console.WriteLine(arrayListTest.Count);
//将 System.Collections.ICollection 的元素添加到 System.Collections.ArrayList 的末尾。

#####使用ArrayList中的元素
添加完元素后,就可以使用里面的元素了。ArrayList可以像Array一样直接用下标索引使用元素。

ClassTest classTestObject2 = new ClassTest();
arrayListTest[1] = classTestObject2;

当然,索引ArrayList的下标也不能越界。
在使用ArrayList里的对象时,要注意:ArrayList集合是System.Object对象的集合,因此在使用对象成员时需要进行类型转换:

((ClassTest)arrayListTest[0]).FunctionTest();
//FunctionTest()方法定义在ClassTest中。

#####删除ArrayList中的元素
使用如下方法可以删除ArrayList中的特定索引值的元素:

arrayListTest.RemoveAt(0);
//将删除下标为0的元素

还可以使用:

arrayListTest.Remove(classTestObject);
//删除arrayTest中的classTestObject对象

删除某些元素后,这些元素后面的元素会自动前移。所以务必注意越界问题。

你可能感兴趣的:(学习笔记)