C# 泛型集合 List Dictionary

泛型集合List和Dictionary

一、泛型(Generic)理解

泛型是一种程序特性,这种特性是用来限定数据类型。也就是我在声明类、方法、集合等具体所使用的相关的数据类型

并不严格限定。在使用的时候,让使用者明确限定,并且不可更改。

买电脑:操作系统的账户,出厂的时候并没有确定给谁使用,但是你们买来激活后,这个序列号就是是你用了。并且不能修改。

对比:string[]      int[]      Teacher[]  数组在定义的时候,是不是类型确定?yes!

二、泛型集合List

1、为什么要用集合? 

对比数组发现,数组定义的时候,必须明确元素个数。

但是实际应用中,有可能需要存储的元素个数大于数组定义的个数,这种情况就得修改,太麻烦。

集合声明的时候不需要限定元素个数,根据实际的需要自动增长。

2、为什要用泛型集合?

就是集合在给我们定义的时候,并没有限定具体的元素类型,我们在使用的时候,需要限定,非常方便。

对比:ArrayList myList=new ArrayList();非泛型集合是object类型。

3、泛型集合List

请参考代码中所用的集合的属性和各种方法。

static void Test1()
        {
            //这个泛型集合只能方法string类型的老师名字
            List teacherList = new List();
            //添加集合元素
            teacherList.Add("常老师");
            teacherList.Add("付老师");
            teacherList.Add("王老师");
            teacherList.Add("张老师");
            teacherList.Add("刘老师");

            //teacherList.Add(10000);  //泛型集合会严格检查数据类型

            Test2(teacherList);
        }
        /// 
        /// 集合的遍历
        /// 
        /// 
        static void Test2(List tlist)
        {
            foreach (string item in tlist)
            {
                Console.WriteLine(item);
            }
            for (int i = 0; i < tlist.Count; i++)
            {
                Console.WriteLine(tlist[i]);
            }
        }

        static void Test3()
        {
            List teacherList = new List()
            {
                 "常老师", "付老师", "王老师", "张老师", "刘老师"
            };
            //集合复制
            List newTeacherList1 = teacherList;// 这两个集合其实是一个
            List newTeacherList2 = new List(teacherList);  //这个是两个不同的集合
            Console.WriteLine(newTeacherList1 == teacherList);
            Console.WriteLine(newTeacherList2 == teacherList);
            //集合长度
            Console.WriteLine(teacherList.Count);
            //集合转换成数组
            string[] tList = teacherList.ToArray();

            //将数组之间添加到集合
            string[] nList = new string[] { "周老师", "赵老师" };
            teacherList.AddRange(nList);

            //判断集合中是否存在某个元素
            bool isExisted1 = teacherList.Contains("王老师");
            bool isExisted2 = teacherList.Contains("李老师");

            //在指定位置插入元素
            teacherList.Insert(2, "Annie老师");

            //移除元素
            teacherList.Remove("Annie老师");
            teacherList.RemoveAt(2); //按照索引
            teacherList.Clear();//全部删除

            //后续还有强大的Linq查询功能(高级编程)。。。目前不用
        }

        static void Test4()
        {
            Teacher teacher1 = new Teacher { TeacherId = 1001, TeacherName = "常老师", Company = "新阁教育" };
            Teacher teacher2 = new Teacher { TeacherId = 1002, TeacherName = "付老师", Company = "新阁教育" };
            Teacher teacher3 = new Teacher { TeacherId = 1003, TeacherName = "王老师", Company = "新阁教育" };

            List tList = new List() { teacher1, teacher2, teacher3 };

            foreach (Teacher item in tList)
            {
                Console.WriteLine(item.TeacherId + "\t" + item.TeacherName);
            }
        }
        

三、泛型集合Dictionary  (Hastable哈希表)

1、Dictionary字典集合

字典:偏旁部首或拼音--->汉字页数

好处:对于我们开发者来说非常容易的根据一个key(名字),找到对应的一个值(对象或其他类型的数据)

static void Test5()
        {
            Teacher teacher1 = new Teacher { TeacherId = 1001, TeacherName = "常老师", Company = "新阁教育" };
            Teacher teacher2 = new Teacher { TeacherId = 1002, TeacherName = "付老师", Company = "新阁教育" };
            Teacher teacher3 = new Teacher { TeacherId = 1003, TeacherName = "王老师", Company = "新阁教育" };

            //添加元素   teacherDic = new Dictionary();
            teacherDic.Add("常老师", teacher1);
            teacherDic.Add("付老师", teacher2);
            teacherDic.Add("王老师", teacher3);

            //集合初始化器
            Dictionary teacherDic2 = new Dictionary()
            {
                ["常老师"] = teacher1,
                ["付老师"] = teacher2,
                ["王老师"] = teacher3
            };

            //根据key获得value
            Console.WriteLine(teacherDic2["常老师"]);
            Console.WriteLine(teacherDic2["王老师"].TeacherId);

            //遍历keys
            foreach (string key in teacherDic2.Keys)
            {
                Console.WriteLine(key);
            }
            //遍历values
            foreach (Teacher value in teacherDic2.Values)
            {
                Console.WriteLine($"{value.TeacherId}\t {value.TeacherName}\t{value.Company}");
            }

            Console.WriteLine("元素个数:"+teacherDic2.Count);

            Console.WriteLine(teacherDic2.ContainsKey("付老师"));

            teacherDic2.Clear();//移除所有的元素

            //把字典中的values转换成集合List
            List tList = teacherDic2.Values.ToList();

           
        }

2、具体使用(参加代码即可)

四、总结集合

本质:就是学习使用对象的容器,因为后面我们所有处理的对象,都是放到容器中。

你可能感兴趣的:(C#,学习笔记,c#,list,开发语言)