首页 > 代码库 > 集合及特殊集合

集合及特殊集合

集合的基本信息:
System.Collections命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位组数、哈希表和字典)的集合。
System.Collections.Generic命名空间包含定义泛型集合的集合和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能。
System.Collections.Specialized命名空间包含专用的和强类型的集合,例如,链接的列表词典、位向量以及只包含字符串的集合。
常用的集合为ArrayList类;特殊集合一般会用到Queue队列集合、Stack栈集合还有Hashtable哈希表集合。
集合不同于数组,是一组可变数量的元素的组合,这些元素可能共享某些特征,需要以某种操作方式一起进行操作。一般来说,这些元素的类型是相同的。
集合与数组的区别:数组是连续的、同一类型数据的一块区域,而集合可以是不连续的、多种数据类型的。

一、ArrayList集合:
ArrayList实现了IList、ICollection、Ienumerable接口。

ArrayList与Array的名字很相似,现在来比较一下两者的异同:
相同点:
1、两者都实现了IList、ICollection、Ienumerable接口。
2、两者都可以使用整数索引访问集合中的元素,包括读取和赋值,且集合中的索引都从0开始。
不同点:
1、ArrayList是集合,而Array是数组;
2、ArrayList是具体类,Array是抽象类;
3、数组必须在实例化时指定元素的数量,该数量一旦确定就不可以更改了,而ArrayList实例时可以不指定集合元素数(有默认初始数量),当然你也可以指定初始容量;
4、获取数组的元素数时使用Length属性,而获取ArrayList集合的元素数时使用Count属性;
5、数组可以有多维,而ArrayList只能是一维。

ArrayList具体提供的功能:
属性——功能说明:
.Count——获取 ArrayList 中实际包含的元素数;
方法——功能说明:
.Add()——将对象添加到 ArrayList 的结尾处(先用Add占位,再进行赋值,赋值方式仅用于修改);
.Clear()——从 ArrayList 中移除所有元素;
.Clone()——创建 ArrayList 的浅表副本,克隆时需要转换数据类型(ArrayList al1=(ArrayList)al.Clone;);
.Contains()——确定某个元素是否在 ArrayList 中(bool a = al.Contains("5"););
.IndexOf()——已重载。返回 ArrayList 或它的一部分中某个值的第一匹配项的从零开始的索引;
.Insert()——将元素插入 ArrayList 的指定索引处,可以在任意位置插入。
.Remove()——从 ArrayList 中移除特定对象的第一个匹配项;
.RemoveAt——移除 ArrayList 的指定索引处的元素;
.Sort()——已重载。对 ArrayList 或它的一部分中的元素进行排序,升序排序;
.Reverse()——翻转整个集合,由升序排序变为降序排序。

foreach(object aa in al)——al集合中有不同类型元素时,用 Object 定义一个变量来遍历集合,Object 是所有数据类型的基类,接收任何类型;
Object aa=al;——Object 类型的aa接收al(ArrayList类型)相当于把al压缩到aa里。

 

练习:

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _1016集合及特殊集合练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //定义一个集合,添加元素、插入元素、移除元素、遍历集合
            ArrayList al = new ArrayList();//定义一个新的集合。集合是一个类,在System.Collections.库中,需要引用。
            al.Add("");//向集合中加入元素,括号中为元素。
            al.Add("");//索引号无需指定,从0号索引开始添加,添加到新的位置。
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            foreach (string a in al)//遍历集合中的每一个元素,元素为string类型
            {
                Console.Write(a);
            }
            Console.WriteLine();
            al.Insert(1,"");//在索引号为“1”的位置插入一个元素“福”字,其他元素依次往后排
            al.Remove("");//移除al集合中的第一个“愿”
            al.RemoveAt(8);//移除al集合中索引号为8的元素
            foreach (string b in al)
            {
                Console.Write(b);
            }
            Console.WriteLine();
            Console.ReadLine();
        }
    }
}
定义一个集合,添加元素、插入元素、移除元素、遍历集合

 技术分享

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _1016集合及特殊集合练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //集合中,由字符查询索引号、由索引号查询字符、获取集合的元素个数
            ArrayList al = new ArrayList();
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            foreach(string s in al)
            {
                Console.Write(s);
            }
            Console.WriteLine();
            int a = al.IndexOf("");//由字符查询其索引号
            Console.WriteLine(a);
            string b=al[6].ToString();//由索引号查询其字符
            Console.WriteLine(b);
            int c = al.Count;//获取集合中元素个数
            Console.WriteLine(c);
            Console.ReadLine();
        }
    }
}
由字符查询其索引号,由索引号查询其字符,获取集合中元素个数

技术分享

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _1016集合及特殊集合练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //输入人数,录入分数,存到集合里,之后按照由高到低的顺序读取出来,并求平均分
            Console.Write("请输入人数:");
            int r = int.Parse(Console.ReadLine());
            ArrayList al = new ArrayList();
            for (int i = 0; i < r; i++)
            {
                Console.Write("请输入第{0}个人的分数:", i + 1);
                int f = int.Parse(Console.ReadLine());
                al.Add(f);
            }
            al.Sort();
            al.Reverse();
            Console.WriteLine("分数由高到低为:");
            foreach (int j in al)
            {
                Console.Write(j + "\t");
            }
            Console.WriteLine();
            double sum = 0;
            for (int k = 0; k < r; k++)
            {
                sum += double.Parse(al[k].ToString());
            }
            double avg = sum / r;
            Console.WriteLine("平均分为:" + avg);
            Console.ReadLine();
        }
    }
}
输入人数,录入分数,存到集合里,之后按照由高到低的顺序读取出来,并求平均分

技术分享

 

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _1016集合及特殊集合练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建新的集合,并将之前的集合中的数据复制到新的集合,并判断集合中是否有某一数据
            ArrayList al = new ArrayList();
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            al.Add("");
            ArrayList xal = new ArrayList();
            xal = (ArrayList)al.Clone();
            bool a = xal.Contains("");
            Console.WriteLine(a);
            Console.ReadLine();
        }
    }
}
创建新的集合,并将之前的集合中的数据复制到新的集合,并判断集合中是否有某一数据

技术分享

二、Stack 栈集合
栈集合:Stack(英文翻译为干草堆),元素先进后出,一个一个赋值,一个一个取值,按顺序。
属性和方法:
.Count——获取集合中元素的个数;
.Push()——将元素一个一个推入集合中,一次只能推一个;
.Peek()——查看集合中的元素,不弹出元素,元素个数不变;
.Pop()——查看并弹出集合中的元素,元素个数减少;
.Clear()——清空集合。

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _1016集合及特殊集合练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //栈集合加入元素、移除元素、查看元素、获取元素个数
            Stack st = new Stack();
            st.Push("");//添加元素时用“push”,将元素推进stack集合中
            st.Push("");
            st.Push("");
            st.Push("");
            st.Push("");
            st.Push("");
            st.Push("");
            st.Push("");
            st.Push("");
            foreach (string a in st)
            {
                Console.Write(a);//栈集合元素先进后出,所以打遍历集合时,顺序为倒序
            }
            Console.WriteLine();
            int h = st.Count;
            Console.WriteLine("此时集合中元素的个数为:"+h);
            string y = st.Pop().ToString();
            string c = st.Peek().ToString();
            Console.WriteLine("移除的元素为:" + y);
            Console.WriteLine("第一个元素为:" + c);
            int g = st.Count;
            Console.WriteLine("此时集合中元素的个数为:" + g);
            Console.ReadLine();
        }
    }
}
栈集合加入元素、移除元素、查看元素、获取元素个数

技术分享

三、Queue 队列集合

元素先进先出,一个一个的赋值一个一个的取值,按照顺序。此集合没有索引,先进的先出。
属性和方法:
.Count——获取集合中元素的个数;
.Enqueue()——将元素加入队列集合;
.DEqueue()——将元素从队列集合中移除,从头开始删除,不需要参数;
.Clear()——清空列表。

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _1016集合及特殊集合练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //队列集合加入元素、移除元素、查看元素、获取元素个数
            Queue st = new Queue();
            st.Enqueue("");//添加元素时用“Enqueue”,将元素加入queue集合中
            st.Enqueue("");
            st.Enqueue("");
            st.Enqueue("");
            st.Enqueue("");
            st.Enqueue("");
            st.Enqueue("");
            st.Enqueue("");
            st.Enqueue("");
            foreach (string a in st)
            {
                Console.Write(a);//栈集合元素先进先出,所以打遍历集合时,顺序为正序
            }
            Console.WriteLine();
            int h = st.Count;
            Console.WriteLine("此时集合中元素的个数为:" + h);
            string y = st.Dequeue().ToString();
            string c = st.Peek().ToString();
            Console.WriteLine("移除的元素为:" + y);
            Console.WriteLine("第一个元素为:" + c);
            int g = st.Count;
            Console.WriteLine("此时集合中元素的个数为:" + g);
            Console.ReadLine();
        }
    }
}
队列集合加入元素、移除元素、查看元素、获取元素个数

技术分享

四、Hashtable 哈希表集合
元素先进后出,一个一个的赋值,但只能一起取值。
属性和方法:
.Add(,)——添加key(主键)和元素;
.Remove()——移除括号内的元素;
.Contains()——判断集合中是否有括号内的元素;
.Count()——计算集合中元素的个数。

 

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace _1016集合及特殊集合练习
{
    class Program
    {
        static void Main(string[] args)
        {
            //Hashtable 哈希表集合加入元素、移除元素、判断是否包含指定元素、获取元素个数
            Hashtable ht = new Hashtable();
            ht.Add(0,"");//哈希表集合插入时add(0,"祝")中,0为索引号,祝为添加的元素
            ht.Add(1,"");
            ht.Add(2,"");
            ht.Add(3,"");
            ht.Add(4,"");
            ht.Add(5,"");
            ht.Add(6,"");
            ht.Add(7,"");
            ht.Add(8,"");
            foreach(int i in ht.Keys)//Keys为key的集合
            {
            Console.Write(i+"  ");
            }
            Console.WriteLine();
            foreach(string j in ht.Values)//Values为元素的集合
            {
                Console.Write(j);
            }
            Console.WriteLine();
            Console.WriteLine("集合中元素个数为:"+ht.Count);
            ht.Remove(3);//ht.Remove("繁");——错误,只能移除索引号,无法移除元素
            ht.Remove(4);
            foreach (int k in ht.Keys)//Keys为key的集合
            {
                Console.Write(k + "  ");
            }
            Console.WriteLine();
            foreach (string l in ht.Values)//Values为元素的集合
            {
                Console.Write(l);
            }
            Console.WriteLine();
            Console.WriteLine("集合中元素个数为:" + ht.Count);
            bool sf = ht.Contains("");
            Console.WriteLine(sf);
            //若执行清空语句,则前面的输入内容都不再显示
            //Console.Clear();//清空集合元素语句
            //Console.WriteLine("清空集合后,元素个数为:"+ht.Count);
            Console.ReadLine();
        }
    }
}
Hashtable 哈希表集合加入元素、移除元素、判断是否包含指定元素、获取元素个数、清空集合

技术分享

 

集合及特殊集合