C# ArrayList动态数组类的用法(非常详细,附带实例)
- ArrayList 数组的容量可以动态增减;
- ArrayList 可以有不同的元素数据类型,这些数据类型统称为 Object;
- ArrayList 数组是一维的。
C# ArrayList对象的创建
C# 创建 ArrayList 对象有 3 种方法。1) 使用 new 关键词创建 ArrayList 对象,例如,创建 arrList 对象的语法如下:
ArrayList arrList = new ArrayList();上述创建 ArrayList 对象 arrList,暂时没有元素,未来可以增加元素。
2) 将一个指定集合内容复制到此 ArrayList 对象内,基础语法概念如下:
ArrayList arrList = new ArrayList(ICollection);注意,ICollection 代表已经定义的集合,这类集合内容是可以编辑更改的。在这里可以将此类的集合当作 ArrayList 的参数,可以参考下列实例:
int[ ] arr = {1, 2, 3}; ArrayList arrList = new ArrayList(arr);上述创建了 ArrayList 对象 arrList,此对象内容是 {1, 2, 3}。
3) 创建 ArrayList 对象时,同时指定元素的个数,下列设定元素个数是 n。
ArrayList arrList = new ArrayList(n);
C#初始化ArrayList对象
创建 ArrayList 对象时,我们可以在对象末端增加大括号,然后直接设置 ArrayList 对象的内容。例如,设置 James 的 3 场得分,然后输出结果。
using System.Collections; ArrayList arrList = new ArrayList {"James", 36, 28, 31}; for (int i = 0; i < arrList.Count; i++) Console.Write($"{arrList[i]}\t");执行结果为:
James 36 28 31
上述程序第 3 行和第 4 行也可以改写:
using System.Collections; ArrayList arrList = new() {"James", 36, 28, 31}; for (int i = 0; i < arrList.Count; i++) Console.Write($"{arrList[i]}\t");当创建 ArrayList 对象后,此对象元素的数据类型是 object,例如,元素 "James" 或元素 36 都是 object,即使 36、28 和 31 从直觉来看是整数事实上也都是 object,如果要进行元素内容的算术运算,则需要使用 Convert.ToInt32(),将 object 转换成 int。
【实例】计算 James 前 3 场的总得分。
using System.Collections; ArrayList arrList = new ArrayList { "James", 36, 28, 31 }; int total = 0; for (int i = 1; i < arrList.Count; i++) total += Convert.ToInt32(arrList[i]); Console.Write($"[{arrList[0]} 前 {arrList.Count - 1} 场得分:{total}]");执行结果为:
James 前 3 场得分:95
C#遍历ArrayList对象
使用 for 关键字遍历对象,如下所示:foreach (var x in arrList) ...因为 ArrayList 对象的元素数据类型是 object,在设定 x 的数据类型时可使用 var 或 object。
我们也可以使用 foreach 关键词遍历对象,如下所示:
using System.Collections; ArrayList arrList = new ArrayList { "James", 36, 28, 31 }; foreach (var x in arrList) Console.Write($"{x}\t");执行结果为:
James 36 28 31
另外,因为 ArrayList 类默认对象元素是 object 对象,所以也可以将 var|object 替换:
using System.Collections; ArrayList arrList = new ArrayList { "James", 36, 28, 31 }; foreach (object x in arrList) Console.Write($"{x}\t");
C# ArrayList的常用属性和方法
ArrayList 的常用属性如下表所示:属 性 | 描 述 |
---|---|
Capacity | 设定或取得 ArrayList 对象的元素个数的容量。 |
Count | 获得 ArrayList 对象的元素个数。 |
IsFixedSize | 如果是 true 表示有固定大小,否则是 false。 |
IsReadOnly | 如果是 true 表示是只读,否则是 false。 |
Item[ ] | 由索引获得指定元素。 |
ArrayList 的常用方法如下表所示:
方法 | 说明 |
---|---|
Add() | 在对象末端增加元素。 |
AddRange() | 在对象末端增加对象。 |
Insert() | 在对象指定索引位置插入元素。 |
Contains() | 回传元素是否存在。 |
Clear() | 清除所有元素。 |
Remove() | 删除第一个相符的元素。 |
RemoveAt() | 删除指定索引的元素。 |
RemoveRange() | 删除指定范围的元素。 |
IndexOf() | 回传元素第一次出现索引的位置。 |
LastIndexOf() | 回传最后出现字符串的索引位置。 |
Sort() | 元素排序。 |
Reverse() | 元素反转排列。 |
1) Add()和AddRange()增加元素
Add() 可以在 ArrayList 对象末端增加元素内容。例如:using System.Collections; ArrayList arrList = new ArrayList { "James", 36, 28, 31 }; arrList.Add(33); arrList.Add(26); foreach (var x in arrList) Console.Write($"{x}\t");执行结果为:
James 36 28 31 33 26
AddRange() 可以在 ArrayList 对象元素末端增加也是 ArrayList 对象的内容:
using System.Collections; ArrayList arrList = new ArrayList { "James", 36, 28, 31 }; ArrayList scList = new ArrayList { 33, 26 }; arrList.AddRange(scList); foreach (var x in arrList) Console.Write($"{x}\t");执行结果为:
James 36 28 31 33 26
2) Insert()插入元素
插入元素 Insert() 方法的基础语法如下:Insert(int index, Object object);上述是在 index 索引位置插入 object 对象。
例如:
using System.Collections; ArrayList xList = new ArrayList(); for (int i = 0; i < 10; i++) // 创建 xList xList.Add(i); Console.WriteLine("输出所创建的 xList"); foreach (int i in xList) Console.Write(i + " "); xList.Insert(5, 15); // 在索引5插入15 Console.WriteLine(); Console.WriteLine("输出插入对象后的 xList"); foreach (var x in xList) Console.Write(x + " ");执行结果为:
输出所创建的 xList
0 1 2 3 4 5 6 7 8 9
输出插入对象后的 xList
0 1 2 3 4 15 5 6 7 8 9
3) Contains()是否包含特定元素
Contains() 方法可以回传是否包含特定元素的判断结果,假设对象是 arrList,语法如下:bool rtn = arrList.Contains(item); // item是搜寻元素如果 arrList 有此 item 则回传 true,如果没有此 item 则回传 false。
例如,输入一种水果,如果水果已经存在则输出“这个水果已经有了”,如果水果不存在则将此水果加入水果清单,然后输出新的水果清单。
using System.Collections; ArrayList fruits = new() { "Apple", "Banana", "Watermelon" }; Console.Write("请输入水果:"); string fruit = Console.ReadLine(); if (fruits.Contains(fruit)) Console.WriteLine("这个水果已经有了"); else { fruits.Add(fruit); Console.WriteLine("谢谢提醒,已经加入水果列表,新水果列表如下:"); foreach (var fru in fruits) Console.Write(fru + " "); }执行结果为:
请输入水果:Banana
这个水果已经有了
Microsoft Visual Studio 调试控制台
请输入水果:Orange
谢谢提醒,已经加入水果列表,新水果列表如下:Apple, Banana, Watermelon, Orange,
4) ArrayList删除元素
Clear() 可以清除所有元素。假设对象是 arrList,那么可以用 arrList.Clear(),其执行后此对象依旧存在,只是不再有元素,未来如果有需要可以再用 Add() 方法增加元素。Remove() 可以删除第一个与目标相符的元素,假设对象是 arrList,其语法如下:
arrList.Remove(item); // item是要删除的元素
【实例】ArrayList 对象有两个 BMW 字符串,只删除第 1 次出现的 BMW 字符串。
using System.Collections; ArrayList cars = new() { "Benz", "BMW", "Nissan", "BMW" }; cars.Remove("BMW"); Console.WriteLine("新的汽车列表如下:"); foreach (var car in cars) Console.Write(car + " ");执行结果为:
新的汽车列表如下:
Benz, Nissan, BMW,
RemoveAt() 可以删除指定索引的元素,假设对象是 arrList,其语法如下:
arrList.RemoveAt(index); // index是要删除的元素索引
例如,删除索引 5 的元素:
using System.Collections; ArrayList xList = new ArrayList(); for (int i = 0; i < 10; i++) // 创建 xList xList.Add(i); Console.WriteLine("输出所创建的 xList"); foreach (int i in xList) Console.Write(i + " "); xList.RemoveAt(5); // 删除索引5元素 Console.WriteLine(); Console.WriteLine("输出删除索引5后的 xList"); foreach (var x in xList) Console.Write(x + " ");执行结果为:
输出所创建的 xList
0 1 2 3 4 5 6 7 8 9
输出删除索引5后的 xList
0 1 2 3 4 6 7 8 9
RemoveRange() 可以删除指定范围的元素,假设对象是 arrList,其语法如下:
arrList.RemoveRange(index, length);index 是要删除元素的起始索引,length 是删除的元素个数,此外,如果删除元素数量超出范围,系统会产生错误。
例如,删除从索引 5 开始,元素长度为 3 的实例。
using System.Collections; ArrayList xList = new ArrayList(); for (int i = 0; i < 10; i++) // 建立 xList xList.Add(i); Console.WriteLine("输出所创建的 xList"); foreach (int i in xList) Console.Write(i + " "); xList.RemoveRange(5, 3); // 删除索引5元素,长度是3 Console.WriteLine(); Console.WriteLine("输出删除索引5,长度是3的 xList"); foreach (var x in xList) Console.Write(x + " ");执行结果为:
输出所创建的 xList
0 1 2 3 4 5 6 7 8 9
输出删除索引5,长度是3的 xList
0 1 2 3 4 8 9
5) ArrayList回传元素出现的位置
IndexOf() 和 LastIndexOf() 的语法如下:int idx = arrList.IndexOf(item); // 回传元素第一次出现的索引 int idx = arrList.LastIndexOf(item); // 回传元素最后一次出现的索引如果找不到此元素则回传 -1。
例如:
using System.Collections; ArrayList cars = new() { "Benz", "BMW", "Nissan", "BMW", "Lexus" }; int idx = cars.IndexOf("BMW"); Console.WriteLine($"第 1 次出现 BMW 的索引是:{idx}"); int idxx = cars.LastIndexOf("BMW"); Console.WriteLine($"最后 1 次出现 BMW 的索引是:{idxx}");执行结果为:
第 1 次出现 BMW 的索引是:1
最后 1 次出现 BMW 的索引是:3
6) ArrayList元素重新排列
Sort() 和 Reverse() 的语法如下:arrList.Sort(); // 从小到大排序 arrList.Reverse(); // 反转排列例如,将一组数字从小到大排序,然后反转排列可以产生从大到小排序:
using System.Collections; ArrayList numbers = new() { 10, 8, 11, 3, 9 }; numbers.Sort(); Console.Write("从小到大排:"); foreach (object num in numbers) Console.Write(num + " "); Console.WriteLine(); numbers.Reverse(); Console.Write("从大到小排:"); foreach (object num in numbers) Console.Write(num + " ");执行结果为:
从小到大排:3 8 9 10 11
从大到小排:11 10 9 8 3