1集合的基本信息
常用的集合为ArrayList类;特殊集合一般会用到Queue队列集合、Stack栈集合还有Hashtable哈希表集合。
集合不同于数组,是一组可变数量的元素的组合,这些元素可能共享某些特征,需要以某种操作方式一起进行操作。一般来说,这些元素的类型是相同的。
集合与数组的区别:数组是连续的、同一类型数据的一块区域,而集合可以是不连续的、多种数据类型的。
2 ArrayList与Array的区别
相同点:
(1)两者都实现了IList、ICollection、IEnumerable接口;
(2)两者都可以使用整数索引访问集合中的元素,包括读取和赋值,且集合中的索引都从0开始。
不同点:
(1)ArrayList是集合,而Array是数组;
(2)ArrayList是具体类,Array是抽象类;
(3)数组必须在实例化时指定元素的数量,该数量一旦确定就不可以更改了,而ArrayList扩展了这一点,当实例化一个ArrayList实例时可以不指定集合元素数(有默认初始容量),当然你也可以指定初始容量;
(4)获取数组的元素数时使用Length属性,而获取ArrayList集合的元素数时使用Count属性;
(5)数组可以有多维,而ArrayList只能是一维。
集合例题:
//输入班级人数,然后输入每个人的姓名,语文、数学、英语成绩,求语文的总分,数学的平均分,英语的最高分(并且打印出是哪个学生)。
Console.Write("请输入班级人数:");
int n = int.Parse(Console.ReadLine());
ArrayList rs = new ArrayList();
double sumyw = 0;
double sumsx = 0;
for (int i = 0; i < n; i++)
{
Console.Write("请输入您的姓名:");
rs.Add(Console.ReadLine());
Console.Write("请输入您的语文成绩:");
rs.Add(double.Parse(Console.ReadLine()));
sumyw += double.Parse(rs[rs.Count - 1].ToString());
Console.Write("请输入您的数学成绩:");
rs.Add(double.Parse(Console.ReadLine()));
sumsx += double.Parse(rs[rs.Count - 1].ToString());
Console.Write("请输入您的英语成绩:");
rs.Add(Console.ReadLine());
}
Console.WriteLine("语文成绩的总分是:" + sumyw);
Console.WriteLine("数学成绩的平均分是:" + sumsx / n);
for (int i = 3; i < 4 * n - 1; i += 4)
{
for (int j = i; j < 4 * n - 4; j += 4)
{
if (double.Parse(rs[i].ToString()) < double.Parse(rs[j + 4].ToString()))
{
object zhong = rs[i - 3];
rs[i - 3] = rs[j + 1];
rs[j + 1] = zhong;
zhong = rs[i - 2];
rs[i - 2] = rs[j + 2];
rs[j + 2] = zhong;
zhong = rs[i - 1];
rs[i - 1] = rs[j + 3];
rs[j + 3] = zhong;
zhong = rs[i];
rs[i] = rs[j + 4];
rs[j + 4] = zhong;
}
}
Console.WriteLine("英语最高分的学生是{0},最高分是{1}。", rs[0], rs[3]);
}
Console.ReadLine();
3 特殊集合
//特殊集合
//stack 先进后出,一个一个赋值,一个一个取值
Stack ss = new Stack();
ss.Push(1);
ss.Push(2);
ss.Push(3);
ss.Push(4);
ss.Push(5);
//取个数
Console.WriteLine(ss.Count);
//弹出
Console.WriteLine(ss.Pop());
//单纯查看 不弹出
Console.WriteLine(ss.Peek());
foreach (int aa in ss)
{
Console.WriteLine(aa);
}
//清空结合
ss.Clear();
Console.ReadLine();
//队列集合
//先进先出,一个个取值、赋值
Queue que = new Queue();
que.Enqueue(2);
que.Enqueue(3);
que.Enqueue(4);
que.Enqueue(5);
que.Enqueue(6);
//移除
que.Dequeue();
//个数
Console.WriteLine(que.Count);
foreach (int aa in que)
{
Console.WriteLine(aa);
}
Console.ReadLine();
////哈希表
////先进后出,一个个赋值,只能一个个取值
Hashtable ht = new Hashtable();
ht.Add(1, "可口可乐");
ht.Add(2, "雪碧");
ht.Add(3, "百事可乐");
ht.Add(4, "芬达");
ht.Add(5, "美年达");
//移除(某个key值得位置的元素)
ht.Remove(3);
//判断是否包含
Console.WriteLine(ht.Contains(5));
Console.WriteLine(ht.Count);
foreach (int aa in ht.Keys)
{
Console.WriteLine(aa);
}
foreach (string ss in ht.Values)
{
Console.WriteLine(ss);
}
//使用枚举类型来读取(表格样式)
IDictionaryEnumerator ide = ht.GetEnumerator();
while (ide.MoveNext())
{
Console.WriteLine(ide.Key + " " + ide.Value);
}
Console.ReadLine();