集合和泛型

集合的定义

u       集合(collection容器)

u       集合的定义:

n         数学上:把一些能够确定的不同的对象看成一个整体,就说这个整体是由这些对象的全体构成的集合,集合中每个对象叫做这个集合的元素

n         C#中,集合是可以包含一组类型对象的数据类型,同时提供了为c#程序管理数据的各种方法,能灵活的管理对象

1)  集合是一组通用的数据类型,帮助我们集中地存储和管理数据

2)  集合使用的数据规则:一定要放相同类型的数据

3)  可以看做容器,放很多的数据

 

集合的优点

便于灵活的对一组相同类型的对象进行存储、检索等管理操作

集合容易使用,它们包括访问集合元素的索引器和遍历集合元素的IEnumerable接口

何时用:如果要对紧密相关的、类似的、较多或大量的数据对象进行有效的处理时,可以用集合

如:搜索。排序、反转、找最大或最小值

1.       找出全班学生中年龄最大的、最小的

2.       从全班学生名册中找有没有张三的学生

3.       this is good day 反转一下

 

集合的功能

存储功能【放>会放】

检索功能【取>会取】

其它管理功能:不同的集合类有所不同

集合的学习目标

能熟练的放值

能熟练的取值

能熟练的使用某些集合类型的特定的功能,如:

搜索,排序,反转,找最大或最小值等。

 

C#包含的结构

C#的集合【广义理论上】【c#的数据结构】

C#的集合包含

确切叫法

习惯叫法

区别

System.Array及派生类

数组

固定数组

不可变数字

数组

不可变数字

没有添加,插入、移除的功能

System.Collection命名空间中的数据类型

非泛型集合

集合

1.       包含可变数组ArrayList可动态的调整大小,具有添加插入、移除的功能

2.       包含堆栈、队列、列表、哈希表

System.Collection.Generic命名空间中数据类型

泛型集合

泛型集合

泛型集合包含的类与非泛型包含的类基本一一对应,是来取代非泛型集合对应的类的

泛型集合提供了更高的类型安全性和效率

 

非泛型集合-内容

System.Collections 简介

使用System.Collections.ArrayList对象

 使用System.Collections.Hashtable哈希表对象

 

ArrayList类【数组列表】

System.Collections.ArrayList类与一维数组类似,主要有以下不同:、

1.         数组的容量或元素数是固定的

2.         数组可以有多个维

3.         可以设置数组的下界

ArrayList

1.         容量可以根据需要动态扩展,给ArrayList添加的对象超出当前容量时,ArrayList会自动扩容为当前容量的两倍

2.         通过设置ArrayList.Capacity的值可以重新分配内存和复制元素

3.         ArrayList具备与数组类似的方法,还具备数组没的方法,

如:添加、插入或移除元素的方法

许多需要使用数组的实例都可以使用ArrayList,相反也一样。

ArrayList的属性:CapacityCount

ArrayList的方法:AddInsertRemoveRemoveAt

 

  //引入命名空间

            ArrayList arr = new ArrayList();

            int a = arr.Capacity;//最多放多少个元素

            int b = arr.Count;//元素的总数

            //arr[0] = 1;//不能用【】放值

            //arr[1] = 2;

            //arr.Add(1);

            //arr.Add(2);

            //循环

            for (int i = 0; i <9; i++)

            {

                arr.Add(i + 1); ;

            }

            arr.Capacity = 9;

            listBox1.Items.Clear();

            foreach (int i in arr)

            {

                listBox1.Items.Add(i);

            }

 

  //数组没有的方法

            arr.Insert(2,22);

            arr.Remove(9);

            arr.RemoveAt(7);

            arr.Add(99);

            //和数组一样的方法

            arr.Sort();

            arr.Reverse();

            int re = arr.IndexOf(99);

            int re2 = arr.LastIndexOf(99);

ArrayList list=new

字典集合类

字典时称为映射或散列表。字典建立key【键,用来快速查找,区分大小写】与value【值,用来存放对应key的值】的对应关系,允许照某个键来访问元素

字典主要用来建立一个查找表

 

组: studentArray[0]=”zhangsan”;

哈希表:studentArray[“msd0911(键”]=”zhangsan(值(哈希中用键访问值

ArrayList list = new ArrayList();

        private void button1_Click(object sender, EventArgs e)

        {

            //string name = txtName.Text;

          

            list.Add(this.txtName.Text.Trim());

            this.ListMessage.Items.Add(this.txtName.Text);

            this.txtName.Text = string.Empty;

        }

        private void btnSelect_Click_1(object sender, EventArgs e)

        {

            list.Sort();

            int i = list.BinarySearch(this.txtSelect.Text.Trim());

            if (i >= 0)

            {

                MessageBox.Show("查找成功" + "在我们数列中的第" + Convert.ToString(i + 1)+"");

            }

            else

            {

                MessageBox.Show("查找失败!");

            }

        }

字典集合类 

字典有时也称为映射或散列表。字典建立Key[]value[]的对应关系,允许按照某个键来访问元素

字典主要用来建立一个查找表

.NET中的字典是System.Collections.Hashtable类【哈希表】,是一个集合类,用于处理和表现类似keyvalue的键值对:1)  key通常用来快速查找(key区分大小写),value用于存储对应于key的值2)  Hashtablekeyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对。3)  属性:CountkeysValues4)  方法:AddGet EnumeratorRemove

用于存储一对对密切相关的信息,然后根据其中一个信息查找或获取另一个对应的值的信息。如学生编号,学生姓名

数组:      studentArray[0] =”zhangsan”;

哈希表:studentArray [“MSD0911”] =”zhangsan”;

方法:GetEnumerator

1)  枚举器(读取器。。。)

2)  移动指针:MoveNext()

3)  返回信息:MoveNext()=> bool

4)  当前行没值

5)  获取当前行的值:属性或方法

 

Hashtable listOfStudents = new Hashtable();

            //将人名引用为Hash(或键)并将电话号码引用为值

            listOfStudents.Add("Sam", "88880001");

            listOfStudents.Add("Smith", " 88880002");

            listOfStudents.Add("Tom", " 88880003");

            System.Console.WriteLine("该校学生的数量为{0} ",listOfStudents.Count);

            Console.ReadKey();

 

public partial class Form2 : Form

    {

        public Form2()

        {

            InitializeComponent();

        }

        Hashtable hast = new Hashtable();

        private void button1_Click(object sender, EventArgs e)

        {

            if (string.IsNullOrEmpty(this.textBox1.Text))

            {

                MessageBox.Show("请认真填写键!");

                return;

            }

            if (string.IsNullOrEmpty(this.textBox2.Text))

            {

                MessageBox.Show("请认真填写值!");

                return;

            }

            hast.Add(textBox1.Text.Trim(), textBox2.Text.Trim());

       

            this.listBox1.Items.Clear();

            foreach (string s in hast.Keys)

            {

                this.listBox1.Items.Add(s);

            }

            this.textBox1.Text = this.textBox2.Text = "";

        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            this.textBox4.Text = hast[this.listBox1.Text].ToString();

        }

    }

QueueStack

QueueStack类是顺序列表集合类,需要将集合中的对象按照某个顺序处理时,可以使用   Queue是一个可以按照先进先出方式处理数据项目的类

Stack是一个可以按照后进先出方式处理数据项目的类

  泛型

泛型类型参数(type parameters)是.NET框架的概念,用来声明泛型的标记。如:非具体的类型参数(<r>);具体的类型参数(<int><string> 

泛型(generic)是用类型参数声明的数据类型或方法[泛型数据类型、泛型方法] 泛型是C#语言2.0和通用语言运行时(CLR)的一个新特性。是将数据类型参数化的语法特征。

1)  声明泛型数据类型或方法时用(非具体的)类型参数

2)  在客户代码中调用时必须用具体的类型参数取代(非具体的)类型参数

3)  如:       *使用泛型的类型参数T写一个类Person<T>       *客户代码可以这样调用:Person<int>pl=new Person<int>()PS:Person<T>实例中每个非具体的T都用int代替

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐