集合的基本信息:
System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合。
一般在新建的项目中,要先添加 using System.Collections;
常用的集合为ArrayList类;特殊集合一般会用到Queue队列集合、Stack栈集合还有Hashtable哈希表集合。
集合与数组的区别:数组是连续的、同一类型数据的一块区域,而集合可以是不连续的、多种数据类型的。
集合的索引也是从0开始的
一、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(); ////add方法才是真的添加 al.Add(4); al.Add(6); al.Add(19); al.Add(4); al.Add(3); ////在某个索引号上插入某个元素 //al.Insert(2,"Hello"); //个数 //Console.WriteLine(al.Count); //al[0]这种赋值方式,仅仅适用于修改 //al[0] = 3; //清空集合 //al.Clear(); //克隆集合 //ArrayList al1 = (ArrayList)al.Clone(); //判断是否包含某个元素 //bool a = al.Contains(3); //Console.WriteLine(a); //获取第一次出现该元素的索引号 //Console.WriteLine(al.IndexOf(4)); //获取最后一次出现该元素的索引号 //Console.WriteLine(al.LastIndexOf(4)); //移除第一个匹配元素 //al.Remove(4); //移除某个索引位置上的元素 //al.RemoveAt(4); //Console.WriteLine(al[0]); //数组的定义:数据类型 总长度 //遍历集合 //foreach(int aa in al) //{ // Console.WriteLine(aa); //} ////排序 升序 //al.Sort(); ////遍历集合 //foreach (int aa in al) //{ // Console.WriteLine(aa); //} ////排为降序 ////翻转集合 //al.Reverse(); ////遍历集合 //foreach (int aa in al) //{ // Console.WriteLine(aa); //} //在有不同数据类型的时候需要遍历集合 //foreach(object aa in al) //{ // Console.WriteLine(aa); //}
二、Stack 集合:
一个一个赋值 一个一个取值 先进后出
count 取集合内元素的个数
push() 将元素一个一个推入集合中
pop() 将元素一个个弹出集合
clear() 清空集合
//Stack st = new Stack(); ////添加元素 //st.Push(2); //st.Push(6); //st.Push(9); //st.Push(5); //st.Push(1); ////个数 ////Console.WriteLine(st.Count); ////只要使用一次pop方法,就会从最后一个元素开始排除 弹出 ////Console.WriteLine(st.Pop()); ////只想查看不弹出 ////Console.WriteLine(st.Peek()); ////遍历集合 //foreach(int aa in st) //{ // Console.WriteLine(aa); //} ////Console.WriteLine(st.Count);
三、queue队列集合
先进先出
count 取集合内元素的个数
Enqueue 进队列集合
Dequeue 出队列集合
clear 清空集合
//Queue que = new Queue(); ////添加元素 //que.Enqueue(5); //que.Enqueue(2); //que.Enqueue(9); //que.Enqueue(8); //que.Enqueue(1); ////移除一个元素 从头开始 //que.Dequeue(); ////个数 ////Console.WriteLine(que.Count); ////遍历集合 //foreach(int aa in que) //{ // Console.WriteLine(aa); //}
四、HashTable 哈希表集合
先进后出 一个一个赋值,但是只能一起取值
Hashtable ht = new Hashtable(); //添加元素 ht.Add(1, "张三"); ht.Add(2, "李四"); ht.Add(3, "王五"); ht.Add(4, "赵六"); ht.Add(5, "冯七"); ht.Add(6, "钱八"); //读取 //foreach (object aa in ht.Keys)//单纯的存储key的集合 //{ // Console.WriteLine(aa); //} //foreach (string bb in ht.Values) //{ // Console.WriteLine(bb); //} //使用枚举类型进行读取,排列成表格 IDictionaryEnumerator ide = ht.GetEnumerator(); while(ide.MoveNext()) { Console.WriteLine(ide.Key+" "+ide.Value); }
例题:抽奖
输入班级人数、姓名、语文成绩、数学成绩、英语成绩,求语文最高分,数学最低分,英语平均分
ArrayList al = new ArrayList();
Console.Write("请输入班级人数:");
int a = int.Parse(Console.ReadLine());
for (int i = 0; i < a; i++)
{
Console.Write("请输入第" + (i + 1) + "人的姓名");
al.Add(Console.ReadLine());
Console.Write("请输入第" + (i + 1) + "人的语文成绩");
al.Add(Console.ReadLine());
Console.Write("请输入第" + (i + 1) + "人的数学成绩");
al.Add(Console.ReadLine());
Console.Write("请输入第" + (i + 1) + "人的英语成绩");
al.Add(Console.ReadLine());
}
for (int i = 1; i < 4 * a - 3; i += 4)
{
for (int j = i + 4; j < 4 * a; j += 4)
{
if (double.Parse(al[i].ToString()) < double.Parse(al[j].ToString()))
{
object b = al[i];
al[i] = al[j];
al[j] = b;
object b1 = al[i - 1];
al[i - 1] = al[j - 1];
al[j - 1] = b1;
object b2 = al[i + 1];
al[i + 1] = al[j + 1];
al[j + 1] = b2;
object b3 = al[i + 2];
al[i + 2] = al[j + 2];
al[j + 2] = b3;
}
}
}
Console.WriteLine("语文最高分:{0},得分:{1}", al[0], al[1]);
for (int i = 2; i < 4 * a - 2; i += 4)
{
for (int j = i + 4; j < 4 * a; j += 4)
{
if (double.Parse(al[i].ToString()) > double.Parse(al[j].ToString()))
{
object b = al[i];
al[i] = al[j];
al[j] = b;
object b1 = al[i - 2];
al[i - 2] = al[j - 2];
al[j - 2] = b1;
object b2 = al[i - 1];
al[i - 1] = al[j - 1];
al[j - 1] = b2;
object b3 = al[i + 1];
al[i + 1] = al[j + 1];
al[j + 1] = b3;
}
}
}
Console.WriteLine("数学最低分:{0},得分:{1}", al[0], al[2]);
double sum = 0;
for (int i = 3; i < 4 * a; i += 4)
{
sum += double.Parse(al[i].ToString());
}
Console.WriteLine("英语平均分是:" + sum / a);
Console.ReadLine();