System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。
集合和数组是异同:
相同点:
(1)两者都实现了IList、ICollection、IEnumerable接口;
(2)两者都可以使用整数索引访问集合中的元素,包括读取和赋值,且集合中的索引都从0开始。
不同点:
(1)ArrayList是集合,而Array是数组;
(2)ArrayList是具体类,Array是抽象类;
(3)数组必须在实例化时指定元素的数量,该数量一旦确定就不可以更改了,而ArrayList扩展了这一点,当实例化一个ArrayList实例时可以不指定集合元素数(有默认初始容量),当然你也可以指定初始容量;
(4)获取数组的元素数时使用Length属性,而获取ArrayList集合的元素数时使用Count属性;
(5)数组可以有多维,而ArrayList只能是一维。
ArrayList的功能:
属性 功能说明
①.Count 获取 ArrayList 中实际包含的元素数
方法 功能说明
① .Add () 将对象添加到 ArrayList 的结尾处
② .Clear() 从 ArrayList 中移除所有元素
③ .Clone() 创建 ArrayList 的浅表副本
④ .Contains() 确定某元素是否在 ArrayList 中
⑤ .IndexOf() 已重载。返回 ArrayList 或它的一部分中某个值的第一个匹配项的从零开始的索引
⑥ .Insert() 将元素插入 ArrayList 的指定索引处。 可在任意位置插入
⑦ .LastIndexOf() 已重载。 返回 ArrayList 或它的一部分中某个值的最后一个匹配项的从零开始的索引
⑧ .Remove() 从 ArrayList 中移除特定对象的第一个匹配项
⑨ .RemoveAt() 移除 ArrayList 的指定索引处的元素
⑩ .Sort() 已重载。 对 ArrayList 或它的一部分中的元素进行排序,升序
⑾.Reverse() 翻转整个集合
ArrayList al = new ArrayList();//初始化
al.Add(2);//添加任何类型
al.Add("2");
al.Add("hello");
al.Add(true);
al[3] = "你好";
al.Clear(); 移除所有元素
ArrayList al1 = new ArrayList();
al1 = (ArrayList)al.Clone();//克隆
Console.WriteLine(al1.Contains("2"));判断是否包含
Console.WriteLine(al1.IndexOf(11));获取第一次出现该元素的索引号
Console.WriteLine(al1.LastIndexOf(2));获取最后一次出现该元素的索引号
al.Insert(2,"Hello");插入某个索引位置某个元素
al.Remove("hello");移除某个第一次出现的元素
al.Sort();排序 ,升序
al.Reverse();翻转整个集合
练习:
//输入班级人数,输入每个人的姓名、语数英成绩进入集合
//求语文的总分,数学的平均分,
//英语的最高分的人的姓名及所有科目的分数(冒泡排序)
//0 姓名 4 8 12
//1 语文成绩5 9 13
//2 数学成绩6 10 14
//3 英语成绩7 11 15 (数字为索引号)
Console.Write("请输入班级人数:");
int n = int.Parse(Console.ReadLine());
double yu = 0;
double shu = 0;
ArrayList al = new ArrayList();
for (int i = 0; i < n; i++)
{
Console.Write("请输入第{0}个人的姓名:", i + 1);
al.Add(Console.ReadLine());
Console.Write("请输入第{0}个人的语文成绩:", i + 1);
al.Add(double.Parse(Console.ReadLine()));
yu += double.Parse(al[al.Count - 1].ToString());
Console.Write("请输入第{0}个人的数学成绩:", i + 1);
al.Add(double.Parse(Console.ReadLine()));
shu += double.Parse(al[al.Count - 1].ToString());
Console.Write("请输入第{0}个人的英语成绩:", i + 1);
al.Add(double.Parse(Console.ReadLine()));
}
Console.WriteLine("所有信息输入完毕,请按回车键继续!");
Console.ReadLine();
Console.WriteLine("语文的总分是:" + yu);
Console.WriteLine("数学的平均分是:" + (shu / n));
for (int i = 3; i < 4 * n - 1; i += 4)
{
for (int j = i; j < 4 * n - 4; j += 4)
{
if (double.Parse(al[i].ToString()) < double.Parse(al[j + 4].ToString()))
{
//换姓名
object zhong = al[i - 3];
al[i - 3] = al[j + 1];
al[j + 1] = zhong;
//换语文
zhong = al[i - 2];
al[i - 2] = al[j + 2];
al[j + 2] = zhong;
//换数学
zhong = al[i - 1];
al[i - 1] = al[j + 3];
al[j + 3] = zhong;
//换英语
zhong = al[i];
al[i] = al[j + 4];
al[j + 4] = zhong;
}
}
}
Console.WriteLine("英语最高分的学生是{0},英语分数是{1},语文分数是{2},数学分数{3}", al[0], al[3], al[1], al[2]);
Console.ReadLine();