system.collections 命名空间包含接口和类,这些借口和类定义各种对象的集合。
system.collections.generic 命名空间包含定义泛型集合的借口和类,反省集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能.
system.collections.specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典,位向量依旧只包含字符串的集合。
常用的集合为arraylist类;特殊集合一般会用到queue队列集合,stack栈集合还有hashtable 哈希表集合。
集合不同于数组,是一组可变数量的元素的组合,这些元素可能共享某些特性,需要以某种操作方式一起进行操作。一般来说,这些元素的类型是相同的。
集合与数字组的区别:数组是连续的,同一类型数据的一块区域,而集合可以是不连续的,多种数据类型的
Arraylist 集合:
arraylist实现了 ilist、icollection、ienumerable 接口;
arraylist与array 的名字很相似,现在来比较一下两者的异同。
相同点:
1 两者都实现了ilist、icollection、ienumerble 接口;
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的指定索引处.可在任意位置插入
.lastlndexof() 已重载.返回arraylist或它的一部分中某个值的最后一个匹配项的从零开始的索引
.remove() 从arraylist中移除特定对象的第一个匹配项
.removeat() 移除arraylist的指定索引处的元素
.sort 已重载.对arraylist或它的一部分中的元素进行排序,升序
.reverse 翻转整个集合
foreach 遍历集合
ArrayList
ArrayList myarry = new ArrayList();
myarry.Add(1);//添加元素
myarry.Add(2);//索引也是从零开始
myarry.Add(3);
myarry.Add(4);
myarry.Add(5);
myarry.Insert(3,"7");
//插入在索引号为3的位置一个为7的值
//后面的索引依次向后+1
//myarry.Remove(4);
//移除数据为4的元素
////括号里面是想要移除的数据
//myarry.RemoveAt(4);
//移除索引号为4的数据
int aa = myarry.Count;
//统计集合内元素的个数
Console.WriteLine("总共有"+aa+"个元素");
//myarry.Clear();//将集合清空
bool b = myarry.Contains(3);
//判断是否有括号内的数据,返回的是bool值(True或者False)
//int bb = myarry.IndexOf(2);
//int cc = myarry.LastIndexOf(2);
//Console.WriteLine(bb);
//myarry.Sort();
//自动进行排序,升序
//若需要降序排列,在自动排列之后,对整个集合进行反转指令
myarry.Reverse();
ArrayList ar = new ArrayList();
ar = (ArrayList)myarry.Clone();
//集合的克隆
foreach (object a in myarry)
{//从头到尾打印出集合中的所有元素
Console.WriteLine(a);
}
Console.ReadLine();
//集合中有元素是以object这个类型存在
//object类是所有类的基类
//小的数据类型不可以接收object类型的数据
//object类型的变量可以接收任何类型的变量
//string aaa = "2";
//object bbb = aaa;
//aaa不可以接收bbb的值
//Console.WriteLine(myarry[3]);
//Console.ReadLine();
Stack aa = new Stack();
aa.Push(1);//向stack集合中添加数据
aa.Push(2);
aa.Push(3);
aa.Push(4);
aa.Push(5);
//注意:Stack是没有索引的
//Console.WriteLine(aa[0]);//是错误的
Console.WriteLine(aa.Peek());//仅用来查看最后一位,不踢出
//aa.Pop();//弹出,踢出最后一个进入集合的数据
//Console.WriteLine( aa.Pop());
int aaa = aa.Count;//统计个数
aa.Clear();//清空集合
//foreach (object a in aa)
//{
// Console.WriteLine(a);
//}
Console.ReadLine();
Queue 队列集合
//先进的先出,后进的后出
//没有索引
Queue qq = new Queue();
qq.Enqueue(1);//给集合中添加元素
qq.Enqueue(2);
qq.Enqueue(3);
qq.Enqueue(4);
qq.Enqueue(5);
qq.Dequeue();//将排在最前面的剔除
int c =qq.Count;//统计个数
qq.Peek();//只查看,不踢出
qq.Clear();//清空集合
bool bb =qq.Contains(3);//判断是否包含这个元素
foreach (object b in qq)
{
Console.WriteLine(b);
}
Console.ReadLine();
//输入人数,输入每一个人的分数
//求平均分
//求最高分
//求最低分
// Console.WriteLine("请输入班级人数");
// int ren = int.Parse(Console.ReadLine());
// ArrayList fen = new ArrayList(ren);
// for (int i = 0; i < ren;i++ )
// {
// Console.WriteLine("请输入第"+(i+1)+"个人的分数");
// fen.Add (double.Parse(Console.ReadLine()));
// }
//double p = 0;
// for (int i = 0; i < ren;i++ )
// {
// p += double.Parse(fen[i].ToString());
// }
// Console.WriteLine("平均分是:"+(p/ren));
// fen.Sort();
// Console.WriteLine("最高分是"+fen[ren-1]);
// Console.WriteLine("最低分是"+fen[0]);
// Console.ReadLine();
//将每个人的姓名,年龄存入集合
//按照年龄从大到小排列
//姓名也需要排列
//需要知道年龄最大的是谁
Console.WriteLine("请输入多少人");
int renshu = int.Parse(Console.ReadLine());
ArrayList age = new ArrayList();
ArrayList name = new ArrayList();
for (int i = 0; i < renshu; i++)
{
Console.Write("请输入姓名");
name.Add(Console.ReadLine());
Console.WriteLine("请输入年龄");
age.Add(int.Parse(Console.ReadLine()));
}
for (int i = 0; i < renshu; i++)
{
for (int j = 0; j < renshu - 1; j++)
{
if (int.Parse(age[i].ToString())<int.Parse(age[j+1].ToString()))
{
int z = int.Parse(age[i].ToString());
age[i] = age[j + 1];
age[j + 1] = z;
string g = name[i].ToString();
name[i] = name[j + 1];
name[j + 1] = g;
}
}
}
Console.WriteLine("年龄最大的是"+name[0]+"是"+age[0]+"岁");
Console.ReadLine();