ArrayList是System.Collections命名空间中的非泛型集合类,类似于数组,有人称其为动态数组,其容量可以根据需要自动扩充,元素的索引也可根据元素数量重新分配,可以动态实现元素的添加、删除等操作。
可以将ArrayList类理解为Array的优化版本,该类既有数组的特征,又有集合的特性,例如,既可以通过下标进行元素访问,对元素进行排序、搜索,又可以像处理集合一样添加,在指定索引处插入及删除元素。
常用属性
- Capacity: 获取或设置ArrayList可包含的元素数,默认为4
- Count: 获取ArrayList中实际包含的元素数
- Item: 获取或设置指定索引处的元素
常用方法
- Add(): 将元素添加到ArrayList的结尾处
- AddRange(): 在ArrayList的末尾增加一定范围内的元素
- Clear(): 清除ArrayList中的所有元素
- Contains(): 检查某元素是否在ArrayList中
- IndexOf: 返回ArrayList中某个元素值得第一个匹配项对应的索引
- Insert(): 将元素插入ArrayList的指定索引处
- Remove(): 从ArrayList移除特定元素的第一个匹配项
- Reverse(): 将ArrayList或它的一部分中的元素的顺序反转
- Sort(): 对ArrayList或它的一部分中的元素进行排序
由于ArrayList中元素的类型默认为object,因此在获取集合元素时需要强制进行类型转换。并且由于object是引用类型,在与值类型进行转换时会引起装箱和拆箱的操作,因此需要付出一些性能代价。
为了实现上面的例子,必须在using区添加System.Collections命名空间。
创建ArrayList
ArrayList的四种创建方式:
- 使用默认的初始容量创建ArrayList,该实例没有任何元素
ArrayList al1 = new ArrayList();
al1.Add("hello");
al1.Add("C#");
al1.Add("world!");
Console.WriteLine("al1中容量是{0}, 个数是{1}", al1.Capacity, al1.Count); // 4 3
- 使用实现了ICollection接口的集合类来初始化新创建的ArrayList,该实例与参数中的集合具有相同的初始容量
ArrayList al2 = new ArrayList(al1);
Console.WriteLine("al2容量是{0}, 个数是{1}",al2.Capacity, al2.Count); // 3 3
- 经由一个整数数值来初始化ArrayList的容量
ArrayList al3 = new ArrayList(18);
Console.WriteLine("al3的容量是:{0}, 元素个数是{1}", al3.Capacity, al3.Count); // 18 0
- 将指定abc字符串重复n次构造数组,以下以三次示例
ArrayList al4 = ArrayList.Repeat("abc", 3);
Console.WriteLine("al4的容量是:{0},元素个数是{1}", al4.Capacity, al4.Count); // 4 3