您的位置: 网站首页 > 程序开发 > C#程序设计 > 第5章 集合 > 【5.2 ArrayList类】

5.2 ArrayList类

 

5.2  ArrayList

ArrayList类是一个常用的集合类型,通俗地讲,可以将ArrayList看作是一个数组和集合的结合体。ArrayList既有数组的某些性质,又有集合的部分功能,因此使用非常方便。本部分将介绍ArrayList类的创建、其元素的添加、插入、删除及其排序、查找和遍历等。

5.2.1  创建ArrayList

与数组相比ArrayList类具有以下优点。

1)数组的容量是固定的,而ArrayList的容量可根据需要自动扩充。如果更改了Capacity属性的值,则可以自动进行内存重新分配和元素复制。

2ArrayList提供添加、插入或移除某一范围元素的方法。在数组中,只能一次获取或设置一个元素的值。

3ArrayList提供将只读和固定大小包装返回到集合的方法;而数组不提供。

创建ArrayList时有两种方法,一种是显式的给出ArrayList的容量大小,另外一种则无需给出。下面的代码创建了一个容量大小为7ArrayList类型变量a

ArrayList a = new ArrayList(7);

如下的代码则在创建ArrayList时没有给出其容量大小:

ArrayList b = new ArrayList();

ArrayList最常用的两个属性为CapacityCount。其中CapacityArrayList的容量,而CountArrayList中元素的个数。

下面介绍一个实例,演示CapacityCount的使用方法。在使用ArrayList等集合类型时,必须添加对System.Collections的引用,即如下语句:

using System.Collections;

1.目的说明

创建一个Windows控制台应用程序,创建ArrayList并演示其CapacityCount属性的用法。

2.实现步骤

1)创建一个名为ArrLstCommon的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList(7);

    //输出其容量

    Console.WriteLine("a容量: {0}", a.Capacity);

    //输出其元素个数

    Console.WriteLine("a元素个数: {0}", a.Count);

    ArrayList b = new ArrayList();

    //输出其容量

    Console.WriteLine("b容量: {0}", b.Capacity);

    //输出其元素个数

    Console.WriteLine("b元素个数: {0}", b.Count);

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-1所示。

5-1  运行结果

4.代码分析

ArrayList类型变量a在创建时给出了其容量大小为7,因此创建后输出其容量大小为7。由于此时这是一个空的ArrayList,因此其元素个数为0。而变量b在创建时没有给出其容量大小,因此两项输出都为0

5.2.2  添加元素

与数组相比,添加元素是集合类型更方便的功能之一。数组一旦被创建,其大小就已经固定,此时即不能增加其元素,也不能减少其元素。即便使用数组自身提供的Clear方法,也只能是使其元素的值改变为初始值。

在数组中实现添加的功能必须新建另外一个长度更大的数组,并将原数组的内容原样复制,然后再给新数组中末尾的元素赋新的值。ArrayList则提供了添加元素的方法,即可以随意向ArrayList的末尾添加新的元素,该方法为Add

ArrayList中可以添加任意类型的元素,也可以只添加一种类型的元素。下面通过一个实例演示如何向ArrayList中添加元素。

1.目的说明

创建一个Windows控制台应用程序,演示如何向ArrayList中添加元素。

2.实现步骤

1)创建一个名为ArrLstAdd的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList(5);

    a.Add("Thank");

    a.Add("You");

    Console.WriteLine("a容量:{0}",a.Capacity);

    Console.WriteLine("a元素个数:{0}",a.Count);

    a.Add(1);

    a.Add(2);

    a.Add(3);

    a.Add(4);

    a.Add(5);

    Console.WriteLine("a容量:{0}", a.Capacity);

    Console.WriteLine("a元素个数:{0}", a.Count);

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-2所示。

5-2  运行结果

4.代码分析

首先,向ArrayList类型变量a中添加两个字符串变量,输出其容量和大小时分别为52。然后,又向a中添加了非字符串类型变量,即12345,再输出其容量和大小时分别为107。可以看到,ArrayList会根据添加变量的多少自动增加其容量,并且对添加的元素没有类型上的限制。

5.2.3  插入元素

ArrayList中的Add方法用于向集合的末尾插入一个元素,若要向ArrayList中其他的位置上插入一个元素,则需使用Insert方法。使用Insert方法时要注意需指定插入的位置,其他与Add方法类似,此处不再赘述

下面介绍一个实例,演示如何向ArrayList中插入元素。

1.目的说明

创建一个Windows控制台应用程序,使用Insert方法向ArrayList中插入元素。

2.实现步骤

1)创建一个名为ArrLstInsert的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList();

    //添加两个元素

    a.Add("Thank");

    a.Add("You");

    //在位置1处连续插入5个元素

    a.Insert(1, 5);

    a.Insert(1, 4);

    a.Insert(1, 3);

    a.Insert(1, 2);

    a.Insert(1, 1);

    //输出

    for (int i = 0; i < 7; i++)

    {

        Console.WriteLine(a[i]);

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-3所示。

5-3  运行结果

4.代码分析

首先,向ArrayList类型变量a中添加两个字符串变量,分别是“Thank”和“You”。然后,向ArrayList的位置1处插入了5个整型数值变量,分别是12345。从结果中可以看到,这5个数组被插入到“Thank”和“You”之间。

5.2.4  删除元素

与数组不能任意地添加或删除其中的元素不同,ArrayList既可以通过Add添加元素,也可以使用Insert插入元素。同时,ArrayList也可以删除其中的元素。在ArrayList所提供的方法中,有ClearRemoveRemoveAt三个方法与元素的删除有关,下面一一说明。Clear方法用于清除ArrayList中所有的元素。

1.目的说明

创建一个Windows控制台应用程序,使用Clear方法清除ArrayList中的元素。

2.实现步骤

1)创建一个名为ArrLstClear的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList();

    //在位置1处连续插入5个元素

    a.Add(5);

    a.Add(4);

    a.Add(3);

    a.Add(2);

    a.Add(1);

    //输出

    for (int i = 0; i < 5; i++)

    {

        Console.WriteLine(a[i]);

    }

    //清除

    a.Clear();

    Console.WriteLine("a的元素个数:{0}", a.Count);

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-4所示。

5-4  运行结果

4.代码分析

首先,向ArrayList类型变量a中添加几个整型元素,然后通过使用Clear方法将其全部清除。从输出中可以看到,使用Clear方法后,ArrayList的元素个数为0

第二个比较常用的方法是Remove方法,Remove方法用于清除ArrayList中的某个元素,使用时需已知该元素。下面通过一个实例演示Remove方法的使用。

1.目的说明

创建一个Windows控制台应用程序,使用Remove方法删除ArrayList中的元素。

2.实现步骤

1)创建一个名为ArrLstRemove的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList();

    //在位置1处连续插入5个元素

    a.Add(5);

    a.Add(4);

    a.Add(3);

    a.Add(2);

    a.Add(1);

    //输出

    for (int i = 0; i < 5; i++)

    {

        Console.WriteLine(a[i]);

    }

    //清除

    a.Remove(3);

    Console.WriteLine("a的元素个数:{0}", a.Count);

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-5所示。

5-5  运行结果

4.代码分析

首先,向ArrayList类型变量a中添加几个整型元素,然后通过使用Remove方法将元素3ArrayList中删除。从输出中可以看到,使用Remove方法后,ArrayList的元素个数为4

第三个比较常用的方法是RemoveAt方法,该方法无需已知要删除的元素,只需知道其在ArrayList中的位置即可。

下面介绍一个实例,演示RemoveAt方法的使用。

1.目的说明

创建一个Windows控制台应用程序,使用RemoveAt方法删除ArrayList中的元素。

2.实现步骤

1)创建一个名为ArrLstRemoveAt的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList();

    //在位置1处连续插入5个元素

    a.Add(5);

    a.Add(4);

    a.Add(3);

    a.Add(2);

    a.Add(1);

    //输出

    for (int i = 0; i < 5; i++)

    {

        Console.WriteLine(a[i]);

    }

    //清除

    a.RemoveAt(2);

    Console.WriteLine("a的元素个数:{0}", a.Count);

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-6所示。

5-6  运行结果

4.代码分析

首先,向ArrayList类型变量a中添加几个整型元素,然后通过使用RemoveAt方法将ArrayList中第2个元素删除。从输出中可以看到,使用RemoveAt方法后,ArrayList的元素个数为4

5.2.5  简单排序

ArrayList中提供了简便的排序方法,同数组中的排序方法使用基本类似。在ArrayList中排序的方法也叫做Sort方法,下面通过一个实例演示其用法。

1.目的说明

创建一个Windows控制台应用程序,使用Sort方法对ArrayList中的元素进行排序。

2.实现步骤

1)创建一个名为ArrLstSort的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList();

 

    //在位置1处连续插入5个元素

    a.Add(35);

    a.Add(44);

    a.Add(33);

    a.Add(12);

    a.Add(17);

    //输出

    Console.WriteLine("排序前:");

    for (int i = 0; i < 5; i++)

    {

        Console.WriteLine(a[i]);

    }

    //清除

    a.Sort();

    //输出

    Console.WriteLine("排序后:");

    for (int i = 0; i < 5; i++)

    {

        Console.WriteLine(a[i]);

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-7所示。

5-7  运行结果

4.代码分析

首先,向ArrayList类型变量a中添加几个任意排列的整型元素,然后通过使用Sort方法对ArrayList中的元素进行排序。从输出中可以看到,使用Sort方法后,ArrayList的元素排列为从小到大。

5.2.6  查找元素

与数组一样,ArrayList中也存在元素的查找问题。ArrayList中提供了两个方法,分别是IndexOfLastIndexOfIndexOf用于查找该元素首次在ArrayList中出现的位置,而LastIndexOf用于查找该元素最后一次在ArrayList中出现的位置。

下面介绍一个实例,演示IndexOfLastIndexOf的用法。

1.目的说明

创建一个Windows控制台应用程序,演示在ArrayList中查找元素的方法。

2.实现步骤

1)创建一个名为ArrLstSearch的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList();

    a.Add(1);

    a.Add(2);

    a.Add(3);

    a.Add(2);

    a.Add(1);

    for (int i = 0; i < 5; i++)

    {

        Console.WriteLine(a[i]);

    }

    int b = a.IndexOf(1);

    int c = a.LastIndexOf(1);

    int d = a.IndexOf(3);

    int e = a.LastIndexOf(3);

    Console.WriteLine("元素1首次出现:{0}", b);

    Console.WriteLine("元素1最后一次出现:{0}", c);

    Console.WriteLine("元素3首次出现:{0}", d);

    Console.WriteLine("元素3最后一次出现:{0}", e);

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-8所示。

5-8  运行结果

4.代码分析

显然,在实例的ArrayList中元素“1”出现了两次,因此使用IndexOfLastIndexOf所得的结果是不同的,而元素“3”只出现了一次,因此使用IndexOfLastIndexOf所得的结果是相同的。

5.2.7  遍历所有元素

遍历ArrayList中的所有元素有很多方法,这里仅介绍两种比较常用的方法,分别是for循环和foreach语句。其使用方法与数组类似,下面通过实例进行说明。

1.目的说明

创建一个Windows控制台应用程序,演示遍历ArrayList中所有元素的方法。

2.实现步骤

1)创建一个名为ArrLstAll的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList();

    a.Add(1);

    a.Add(2);

    a.Add(3);

    a.Add(2);

    a.Add(1);

    //方法1

    Console.WriteLine("方法1");

    for (int i = 0; i < 5; i++)

    {

        Console.WriteLine(a[i]);

    }

    //方法2

    Console.WriteLine("方法2");

 

    foreach(int i in a)

    {

        Console.WriteLine(i);

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-9所示。

5-9  运行结果

4.代码分析

可以看到,两种方法都给出了同样的结果。

5.2.8  转换为数组

ArrayList和数组非常相似,使用时经常会将ArrayList转换为数组进行一些操作。在C#中,将ArrayList转换为数组非常方便,只需使用ArrayList.ToArray方法即可。下面介绍一个实例,演示两者之间的转换。

1.目的说明

创建一个Windows控制台应用程序,演示将ArrayList转换为数组的方法。

2.实现步骤

1)创建一个名为ArrLstConvert的控制台应用程序项目。

2)修改Program.cs文件中Main方法的内容如下:

static void Main(string[] args)

{

    ArrayList a = new ArrayList();

    a.Add(1);

    a.Add(2);

    a.Add(3);

    a.Add(4);

    a.Add(5);

    int[] b = new int[5];

    b = (int[])a.ToArray(typeof(int));

    foreach (int i in b)

    {

        Console.WriteLine(i);

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-10所示。

5-10  运行结果

4.代码分析

可以看到,ArrayList类型变量a中的元素被原样复制到数组b中。