- C#从入门到精通(第4版)
- 明日科技
- 2422字
- 2020-11-28 16:23:24
7.6 ArrayList类
视频讲解:光盘\TM\lx\7\06 ArrayList类.mp4
ArrayList类相当于一种高级的动态数组,它是Array类的升级版本,本节将对该类进行详细介绍。
7.6.1 ArrayList类概述
ArrayList类位于System.Collections命名空间下,它可以动态地添加和删除元素。可以将ArrayList类看作扩充了功能的数组,但它并不等同于数组。
与数组相比,ArrayList类为开发人员提供了以下功能。
数组的容量是固定的,而ArrayList的容量可以根据需要自动扩充。
ArrayList提供添加、删除和插入某一范围元素的方法,但在数组中,只能一次获取或设置一个元素的值。
ArrayList提供将只读和固定大小包装返回到集合的方法,而数组不提供。
ArrayList只能是一维形式,而数组可以是多维的。
说明 Array的长度是它可包含的元素总数。Array的秩是Array中的维数。Array中维度的下限是Array中该维度的起始索引,多维Array的各个维度可以有不同的界限。
ArrayList提供了3个构造器,通过这3个构造器可以有3种声明方式,下面分别介绍。
(1)默认的构造器,将会以默认的大小(16位)来初始化内部的数组。构造器格式如下。
public ArrayList();
通过以上构造器声明ArrayList的语法格式如下。
ArrayList List = new ArrayList();
List:ArrayList对象名。
【例7.22】声明一个ArrayList对象,并给其添加10个int类型的元素值,代码如下。
ArrayListList=new ArrayList();
for (int i=0; i<10; i++) //给ArrayList对象添加10个int元素
List.Add(i);
(2)用一个ICollection对象来构造,并将该集合的元素添加到ArrayList中。构造器格式如下。
public ArrayList(ICollection);
通过以上构造器声明ArrayList的语法格式如下。
ArrayList List = new ArrayList(arryName);
List:ArrayList对象名。
arryName:要添加集合的数组名。
【例7.23】声明一个int类型的一维数组,然后声明一个ArrayList对象,同时将已经声明的一维数组中的元素添加到该对象中,代码如下。
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; ArrayListList=new ArrayList(arr);
(3)用指定的大小初始化内部的数组。构造器格式如下。
public ArrayList(int);
通过以上构造器声明ArrayList的语法格式如下。
ArrayList List = new ArrayList(n);
List:ArrayList对象名。
n:ArrayList对象的空间大小。
【例7.24】声明一个具有10个元素的ArrayList对象,并为其赋初始值,代码如下。
ArrayListList=new ArrayList(10); for (int i=0; i<List.Count; i++) //给ArrayList对象添加10个int元素 List.Add(i);
ArrayList常用属性及说明如表7.1所示。
表7.1 ArrayList常用属性及说明
7.6.2 ArrayList元素的添加
向ArrayList集合中添加元素时,可以使用ArrayList类提供的Add方法和Insert方法,下面对这两个方法进行详细介绍。
1.Add方法
Add方法用来将对象添加到ArrayList集合的结尾处,其语法格式如下。
public virtual int Add(Object value)
value:要添加到ArrayList的末尾处的Object,该值可以为空引用。
返回值:ArrayList索引,已在此处添加了value。
说明 ArrayList允许null值作为有效值,并且允许重复的元素。
【例7.25】声明一个包含6个元素的一维数组,并使用该数组实例化一个ArrayList对象,然后使用Add方法为该ArrayList对象添加元素,代码如下。
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
ArrayList List=new ArrayList(arr); //使用声明的一维数组实例化一个ArrayList对象
List.Add(7); //为ArrayList对象添加元素
2.Insert方法
Insert方法用来将元素插入ArrayList集合的指定索引处,其语法格式如下。
public virtual void Insert ( int index, Object value)
index:从零开始的索引,应在该位置插入value。
value:要插入的Object,该值可以为空引用。
说明 >如果ArrayList实际存储元素数已经等于ArrayList可存储的元素数,则会通过自动重新分配内部数组增加ArrayList的容量,并在添加新元素之前将现有元素复制到新数组中。
【例7.26】声明一个包含6个元素的一维数组,并使用该数组实例化一个ArrayList对象,然后使用Insert方法在该ArrayList对象的指定索引处添加一个元素,代码如下。
nt[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
ArrayList List=new ArrayList(arr); //使用声明的一维数组实例化一个ArrayList对象
List.Insert(3, 7); //在ArrayList集合的指定位置添加一个元素
【例7.27】创建一个控制台应用程序,其中定义了一个int类型的一维数组,并使用该数组实例化一个ArrayList对象,然后分别使用ArrayList对象的Add方法和Insert方法向ArrayList集合的结尾处和指定索引处添加元素。程序代码如下。(实例位置:光盘\TM\sl\7\12)
static void Main(string[] args) { int[] arr = new int[] { 1, 2, 3, 4, 5, 6 }; ArrayListList=new ArrayList(arr); //使用声明的一维数组实例化一个ArrayList对象 Console.WriteLine("原ArrayList集合:"); foreach (int i in List) //遍历ArrayList集合并输出 { Console.Write(i + " "); } Console.WriteLine(); for (int i = 1; i < 5; i++) { List.Add(i+arr.Length); //为ArrayList集合添加元素 } Console.WriteLine("使用Add方法添加:"); foreach (int i in List) //遍历添加元素后的ArrayList集合并输出 { Console.Write(i + " "); } Console.WriteLine(); List.Insert(6, 6); //在ArrayList集合的指定位置添加元素 Console.WriteLine("使用Insert方法添加:"); foreach (int i in List) //遍历最后的ArrayList集合并输出 { Console.Write(i + " "); } Console.WriteLine(); }
按Ctrl+F5键查看运行结果,如图7.17所示。
图7.17 ArrayList元素的添加实例运行结果
说明 在ArrayList集合中插入一个数组时,只需要在上面代码中重新声明一个一维数组,并将List.Insert(6,6)语句改为List.InsertRange(6,一维数组名)即可。
注意 程序中使用ArrayList类时,需要在命名空间区域添加using System.Collections;,下面将不再提示。
闯关训练:使用ArrayList集合记录学生的姓名、性别及出生年月等信息。如:
小王 男1980-03-08
小刘 女1981-06-21
小赵 男1990-07-01
小李 男1995-09-25
7.6.3 ArrayList元素的删除
在ArrayList集合中删除元素时,可以使用ArrayList类提供的Clear方法、Remove方法、RemoveAt方法和RemoveRange方法。下面对这4个方法进行详细介绍。
1.Clear方法
Clear方法用来从ArrayList中移除所有元素,其语法格式如下。
public virtual void Clear()
【例7.28】声明一个包含6个元素的一维数组,并使用该数组实例化一个ArrayList对象,然后使用Clear方法清除ArrayList中的所有元素,代码如下。
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
ArrayList List = new ArrayList(arr);
List.CIear();
2.Remove方法
Remove方法用来从ArrayList中移除特定对象的第一个匹配项,其语法格式如下。
public virtual void Remove(Object obj)
obj:要从ArrayList移除的Object,该值可以为空引用。
说明 在删除ArrayList中的元素时,如果不包含指定对象,则ArrayList将保持不变。
【例7.29】声明一个包含6个元素的一维数组,并使用该数组实例化一个ArrayList对象,然后使用Remove方法从声明的ArrayList对象中移除与3匹配的元素,代码如下。
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
ArrayList List = new ArrayList(arr);
List.Remove(3);
3.RemoveAt方法
RemoveAt方法用来移除ArrayList的指定索引处的元素,其语法格式如下。
public virtual void RemoveAt(int index)
index:要移除的元素的从零开始的索引。
【例7.30】声明一个包含6个元素的一维数组,并使用该数组实例化一个ArrayList对象,然后使用RemoveAt方法从声明的ArrayList对象中移除索引为3的元素,代码如下。
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
ArrayList List = new ArrayList(arr);
List.RemoveAt(3);
4.RemoveRange方法
RemoveRange方法用来从ArrayList中移除一定范围的元素,其语法格式如下。
public virtual void RemoveRange( int index, int count)
index:要移除的元素的范围从零开始的起始索引。
count:要移除的元素数。
注意 在RemoveRange方法中参数count的长度不能超出数组的总长度减去参数index的值。
【例7.31】声明一个包含6个元素的一维数组,并使用该数组实例化一个ArrayList对象,然后在该ArrayList对象中使用RemoveRange方法从索引3处删除两个元素,代码如下。
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
ArrayList List = new ArrayList(arr);
List.RemoveRange(3,2);
【例7.32】创建一个控制台应用程序,使用RemoveRange方法删除ArrayList集合中的一批元素。程序代码如下。(实例位置:光盘\TM\sl\7\13)
static void Main(string[] args)
{
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
ArrayList List=new ArrayList(arr); //使用声明的一维数组实例化一个ArrayList对象
Console.WriteLine("原ArrayList集合:");
foreach (int i in List) //遍历ArrayList集合中的元素并输出
{
Console.Write(i.ToString() + " ");
}
Console.WriteLine();
List.RemoveRange(0, 5); //从ArrayList集合中移除指定下标位置的元素
Console.WriteLine("删除元素后的ArrayList集合:");
foreach (int i in List) //遍历删除元素后的ArrayList集合并输出其元素
{
Console.Write(i.ToString() + " ");
}
Console.WriteLine();
}
按Ctrl+F5键查看运行结果,如图7.18所示。
图7.18 ArrayList元素的删除实例运行结果
7.6.4 ArrayList的遍历
ArrayList集合的遍历与数组类似,都可以使用foreach语句,下面通过一个实例说明如何遍历ArrayList集合中的元素。
【例7.33】创建一个控制台应用程序,其中实例化了一个ArrayList对象,并使用Add方法向ArrayList集合中添加了两个元素,然后使用foreach语句遍历ArrayList集合中的各个元素并输出。程序代码如下。(实例位置:光盘\TM\sl\7\14)
static void Main(string[] args) { ArrayList list=new ArrayList(); //实例化一个ArrayList对象 list.Add("TM"); //向ArrayList集合中添加元素 list.Add("C#从入门到精通"); foreach(string str inlist) //遍历ArrayList集合中的元素并输出 { Console.WriteLine(str); } }
按Ctrl+F5键查看运行结果,如图7.19所示。
图7.19 ArrayList的遍历实例运行结果
7.6.5 ArrayList元素的查找
查找ArrayList集合中的元素时,可以使用ArrayList类提供的Contains方法、IndexOf方法和LastIndexOf方法。IndexOf方法和LastIndexOf方法的用法与string字符串类的同名方法的用法基本相同,下面主要对Contains方法进行详细介绍。
Contains方法用来确定某元素是否在ArrayList集合中,其语法格式如下。
public virtual bool Contains(Object item)
item:要在ArrayList中查找的Object,该值可以为空引用。
返回值:如果在ArrayList中找到item,则为true;否则为false。
【例7.34】声明一个包含6个元素的一维数组,并使用该数组实例化一个ArrayList对象,然后使用Contains方法判断数字2是否在ArrayList集合中,代码如下。
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
ArrayList List = new ArrayList(arr);
Console.Write(List.Contains(2)); //判断ArrayList集合中是否包含指定的元素
程序的运行结果为true。