集合和泛型

 集合和泛型c#

集合的定義數組

u  集合(collection容器)安全

u  集合的定義:數據結構

n  數學上:把一些可以肯定的不一樣的對象當作一個總體,就說這個總體是由這些對象的全體構成的集合,集合中每一個對象叫作這個集合的元素框架

n  C#中,集合是能夠包含一組類型對象的數據類型,同時提供了爲c#程序管理數據的各類方法,能靈活的管理對象學習

1)  集合是一組通用的數據類型,幫助咱們集中地存儲和管理數據this

2)  集合使用的數據規則:必定要放相同類型的數據spa

3)  能夠看作容器,放不少的數據指針

 

集合的優勢orm

便於靈活的對一組相同類型的對象進行存儲、檢索等管理操做

集合容易使用,它們包括訪問集合元素的索引器和遍歷集合元素的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的屬性:Capacity、Count

ArrayList的方法:Add、Insert、Remove、RemoveAt

 

  //引入命名空間

            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)  Hashtable中keyvalue鍵值對均爲object類型,因此Hashtable能夠支持任何類型的keyvalue鍵值對。3)  屬性:Count、keys、Values4)  方法:Add、Get Enumerator、Remove

用於存儲一對對密切相關的信息,而後根據其中一個信息查找或獲取另外一個對應的值的信息。如學生編號,學生姓名

數組:      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

Queue和Stack類是順序列表集合類,須要將集合中的對象按照某個順序處理時,能夠使用   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代替

相關文章
相關標籤/搜索