ArrayList是System.Collections命名空间中的类,类似于数组,有人称其为动态数组,其容量可以根据需要自动扩充,元素的索引也可根据元素数量重新分配,可以动态实现元素的添加、删除等操作。
下表列出了ArrayList类的几个常用属性 :
属性名称 | 属性说明 |
Capacity | 获取或设置ArrayList可包含的元素数,默认为4。 |
Count | 获取ArrayList中实际包含的元素数。 |
下表列出了ArrayList类的几个常用属方法:
方法名称 | 方法说明 |
Add | 将元素添加到 ArrayList的结尾处。 |
AddRange | 在ArrayList 的末尾增加一定范围内的元素。 |
Clear | 清除ArrayList中所有元素。 |
Contains | 检查某元素是否在ArrayList中。 |
IndexOf | 返回ArrayList中某个元素值的第一个匹配项对应的索引。 |
Insert | 将元素插入ArrayList的指定索引处。 |
Remove | 从ArrayList中移除特定元素的第一个匹配项。 |
Reverse | 将ArrayList或它的一部分中元素的顺序反转。 |
Sort | 对ArrayList或它的一部分中的元素进行排序。 |
为了创建ArrayList,可以使用三种重载构造函数中的一种,还可以使用ArrayList的静态方法
Repeat创建一个新的ArrayList。这三个构造函数的声明如下:
使用默认的初始容量创建ArrayList,该实例没有任何元素。格式如下:
public ArrayList();
使用实现了ICollection接口的集合类来初始化新创建的ArrayList。格式如下:
public ArrayList(ICollection c);
指定一个整数值来初始化ArrayList的容量,创建ArrayList。格式如下:
ArrayList(Int32);
ArrayList的四种创建方法举例如下:
//①使用默认的初始容量创建ArrayList,该实例并没有任何元素
ArrayList al1 = new ArrayList(); //创建一个ArrayList对象al1
al1.Add("Hello"); //向al1的末尾添加一个集合元素
al1.Add("Cristiano"); //向al1的末尾添加一个集合元素
al1.Add("Ronaldo!"); //向al1的末尾添加一个集合元素
//输出al1中的容量和元素个数
Console.WriteLine("该ArrayList的容量是:{0},元素个数是,{1}", al1.Capacity, al1.Count);
//②使用实现了ICollection接口的集合类来初始化新创建的ArrayList
ArrayList al2 = new ArrayList(al1); //创建ArrayList对象al2,并用al1初始化al2
//③经由指定一个整数值来初始化ArrayList的容量
ArrayList al3 = new ArrayList(18); //ArrayList对象al3,容量初始为指定的数值18
Console.WriteLine("该ArrayList的容量是:{0},元素个数是,{1}", al3.Capacity, al3.Count);
//④将指定abc字符串重复3次构造数组
ArrayList al4 = ArrayList.Repeat("abc", 3); //指定abc字符串重复3次构造ArrayList对象al4
创建好ArrayList后,有两种方法可向ArrayList末尾中添加元素。
(1)Add方法将单个元素添加到列表的尾部;
AddRange方法获取一个实现ICollection接口的集合实例,例如Array、Queue、Stack等,并将这个集合实例按顺序添加到列表的尾部。
(2)也可使用Insert和InsertRange方法向ArrayList中指定的位置插入元素:Insert方法添加
单个元素到指定的索引位置;InsertRange从指定的位置开始添加一个实现了ICollection接口的实例。
【添加元素实例】
ArrayList al = new ArrayList(20); //声明一个接受20个元素的ArrayList
al.Add("我是元素1"); //使用ArrayList的Add方法添集合元素
al.Add("我是元素2"); //使用ArrayList的Add方法添加集合元素
al.Add("我是元素3");//使用ArrayList的Add方法添加集合元素
string[] strs = {"我是元素4", "我是元素5", "我是元素6" };//定义一个有三个元素的字符串数组
al.AddRange(strs); //使用AddRange方法按集合参数中元素的顺序添加
al.Insert(0,"新增第1个元素"); //在ArrayList的指定索引0处添加一个新元素
ArrayList list2=new ArrayList(); //创建一个ArrayList对象list2
list2.Add("我是新增元素1"); //使用ArrayList的Add方法添加集合元素
list2.Add("我是新增元素2"); //使用ArrayList的Add方法添加集合元素
al.InsertRange(2,list2); //将list2中的两个元素插入到al中的索引为2的位置。
for (int i = 0; i < al.Count; i++)
{
Console.WriteLine(al[i]);
}
ArrayList提供了三种方法将指定元素从集合中移除,这三种方法是Remove、RemoveAt和RemoveRange方法。
Remove方法接受一个object类型的参数,用于移除指定元素值的第一个匹配集合元素。
RemoveAt方法接受一个int类型的参数,用于删除指定索引的集合元素。
RemoveRange方法从集合中移除一定范围的元素。
此外,还可以使用Clear方法从ArrayList中移除所有元素。
【删除元素实例】
//声明一个接受20个元素的ArrayList
ArrayList al = new ArrayList(20);
//添加元素
al.AddRange(new string[6] { "元素1", "元素2", "元素3", "元素4", "元素5","元素6" });
//调用Remove方法删除元素, 从ArrayList中移除特定对象的第一个匹配项,注意是第一个
al.Remove("元素2");
//调用RemoveAt方法删除指定索引位置元素
al.RemoveAt(2);
//调用RemoveRange方法删除指定范围的元素
al.RemoveRange(2, 2);
//清除所有元素
al.Clear();
可使用Sort方法对ArrayList集合中的元素进行排序。Sort有三种重载方法:
(1)使用集合元素的比较方式进行排序:
public virtual void Sort();
(2)使用自定义比较器进行排序:
public virtual void Sort(IComparer comparer);
(3)使用自定义比较器进行指定范围的排序:
public virtual void Sort(int index, int count, IComparer comparer)
【排序实例】
例如:使用集合元素的比较方式进行排序的代码如下:
//声明一个ArrayList对象
ArrayList al = new ArrayList();
//添加元素
al.AddRange(new string[] { "Array1", "Array2","Array6", "Array5", "Array4" });
//对ArrayList集合中的元素进行排序
al.Sort();
为了在数组列表中查找元素,最常使用的是IndexOf或LastIndexOf方法。
IndexOf方法从前向后搜索指定的元素,如果找到,返回匹配的第一项的自0开始的索引,否则,返回-1。LastIndexOf方法从后向前搜索指定的元素,如果找到,返回匹配的最后一项的自0开始的索引,否则,返回-1。这两个方法各自都有三个重载版本,表示从指定的索引处开始搜索或者是从指定索引处搜索指定长度的元素。
//定义ArrayList
ArrayList myAL = new ArrayList();
//在ArrayList中添加元素
myAL.Add("the");
myAL.Add("quick");
myAL.Add("brown");
myAL.Add("fox");
myAL.Add("jumps");
myAL.Add("over");
myAL.Add("the");
myAL.Add("lazy");
myAL.Add("dog");
// Search for the first occurrence of the value.
String myString = "the";
int myIndex = myAL.IndexOf(myString);
Console.WriteLine("The first occurrence of \"{0}\" is at index {1}.", myString, myIndex);
// Search for the first occurrence of the value in the last section of the ArrayList.
myIndex = myAL.IndexOf(myString, 4);
Console.WriteLine("The first occurrence of \"{0}\"between index 4 and the end is at index {1}.",
myString, myIndex);
// Searches for the last occurrence of the value.
myIndex = myAL.LastIndexOf(myString);
Console.WriteLine("The last occurrence of \"{0}\" isat index {1}.", myString, myIndex);
ArrayList内部维护着一个数组,可以通过下标进行访问,而且ArrayList实现了IEnumerable接口,因此,要遍历集合,可以使用for或foreach方法。
下面的代码示例演示了如何使用for和foreach进行集合元素遍历。
ArrayList alwriter = new ArrayList(new string[] { "C罗", "德布劳内", "克罗斯", "穆勒", "孙兴慜“, "武磊", "久保健英", "加纳乔“});
//使用for遍历ArrayList
for (int i = 0; i <= alwriter.Count - 1; i++)
{
Console.Write(alwriter[i]);
}
//使用foreach遍历
foreach (object s in alwriter) //使用foreach遍历
{
Console.Write(s);
}