创建一个ArrayList
可以使用ArrayList类提供的三个构造器之一实例化一个ArrayList对象。
1、最简单的形式是无参数构造器:
ArrayList courseTaken= new ArrayList();
该构造器创建一个内容的、缺省容量为16个元素的ArrayList。当元素数量到达当前上限时,ArrayList的容量自动翻倍。
2、第二种形式是接受一个整数参数,该参数代表ArrayList的初始容量;如:
ArrayList students = new ArrayList(400);
当我们确知ArrayList中将会放大量引用时,应用这种形式的构造器。把ArrayList初始容量定义为大于缺省的16个元素,减少了重新设定容量的次数,从而提升了性能。
3、第三种构造器接受任何合适的C#群集对象——即,所用实现了ICollection接口的类的对象,包括System.Collecions类的对象和System.Array类的对象——作为参数,然后复制传入群集的内容,组装为新构造函数的ArrayList对象。
//创建一个Course对象数组:
Course[] courses = new Course[3];
courses[1] = new Course("Math 101");
courses[2] = new Course("Physics 250");
courses[3] = new Course("Management 283");
//其它细节从略
//....在后面的程序中,用它来初始化一个ArrayList。
ArrayList courseTaken = new ArrayList(course);
在上面的代码片断中,我们初始化了一个ArrayList,它容纳一个Course数组。注意两个群集都指向相同的对象。唯一的变化就是从一种群集转化为另一种群集,然后可以使用该群集的方法。
for (int i=0;i<studentList.Count;i++)
{
Console.WriteLine("课程名称为:{0}:",((Course)courseTaken [i]).Name);
}
//输出结果
课程名称为:Math 101
课程名称为:Physics 250
课程名称为:Management 283
ArrayList属性
ArrayList声明了多个属性来返回自身信息。
Capacity 属性,用来得到ArrayList的容量;(如果试图在代码中将它的长度减小到不能容纳已有元素时,一个ArgumentOutOfRangeException异常会被抛出。)
Count 属性,ArrayList中当前的元素数量;
为得到一个ArrayList中的某个元素,ArrayList类定义了一个特殊的索引属性,允许我们像数组一样访问里面的元素——在方括号中输入要索引的整数值。索引器返回一个普通的对象引用,被索引的元素被转换为原本的类型。
下面的例子演示了这些属性:
Course c1 = new Course("Math 101");
Course c2 = new Course("Physics 250");
Course c3 = new Course("Management 283")
//正确地使用ArrayList索引器(注意,看起来在访问一个数组!)
courseTaken[0] = c1;
courseTaken[2] =c2;
courseTaken[3]=c3;
//使用capacity 和Count属性
Console.WriteLine("Capacity = " + courseTaken.Capacity);
Console.WriteLine("no. of elements =" + courseTaken.Count);
//用索引器取出ArrayList中的元素
for(int i=0;i<courseTaken.Count;i++)
{
//用索引器取出ArrayList中的元素。
Course c =(Course) courseTaken[i];
//我们现在c上调用course的方法
Console.WriteLine(c.Name);
}
这个例子说明,在ArrayList中加入不同类型元素,可能是很危险的。ArrayList中的元素被遍历并转换为Course对象。然后,每个Course对象中Name属性被调用。如果ArrayList中每个元素都是Course对象(或者从Course类派生的类型对象),就能工作正常。但是如果有不同类型的元素存在,就会抛出一个InvalidCastException异常。
ArrayList类的方法
常用的ArrayList方法如下所示:
1、public virtual int Add(object value) :在ArrayList末尾添加一个对象引用,若容量不足则自动扩张。前面的Virtual关键字表示允许派生类覆载这个方法。返回值是一个int类型,表示传入参数在ArrayList中的位置。
2、public void Add(ICollection c ): 在ArrayList末尾添加特定群集的内容;
3、public void SetRange(int startIndex,ICollecion c) :从指定起始处用另一ICollecion对象取代ArrayList原有元素。如果c中的元素大于ArrayList要取代的部分,ArrayList将会自动扩展。
4、public int IndexOf(object obj): 寻找一个指定的对象引用,如果找到,则返回第一个匹配位置(从0开始计数)。如果没有找到,返回-1;
5、public bool Contains(object obj):寻找一个指定对象引用,如果找到返回true,否则返回false;
6、public void RemoveAt(int index): 将指定位置的元素剔除,并且“填上”空洞。Count 属性将会递减,而Capacity则保持不变。如果指定的索引大于Count的值或者小于零,将抛出一个ArgumentOutOfRangeException异常。
7、public void Remove(object obj): 在ArrayList中搜寻指定的对象引用,如果找到,则把第一个找到的对象的引用从ArrayList中除移。Count属性将会减1,而Capacity则会保持不变。如果希望删掉所有的obj,在一个while循环中组合使用Contains和Remove方法:
while(arraylist.Contains(x)){
arraylist.Remove(x);
}
8、public void Sort() :对ArrayList中的元素排序。默认按照字母排序对string元素排序,按照从小到大顺序对数值型元素排序;
9、public void Clear() :清空整个ArrayList。count属性被设为0,capacity不变;
10、public object[] ToArray(): 创建一个Object数组,并将ArrayList中的元素拷贝进数组。
ArrayList类还有很多方法。如果需要完整的ArrayList方法列表,可以查阅MSDN.