集合和泛型c#
集合的定義數組
u 集合(collection容器)安全
u 集合的定義:數據結構
n 數學上:把一些可以肯定的不一樣的對象當作一個總體,就說這個總體是由這些對象的全體構成的集合,集合中每一個對象叫作這個集合的元素框架
n C#中,集合是能夠包含一組類型對象的數據類型,同時提供了爲c#程序管理數據的各類方法,能靈活的管理對象學習
1) 集合是一組通用的數據類型,幫助咱們集中地存儲和管理數據this
2) 集合使用的數據規則:必定要放相同類型的數據spa
3) 能夠看作容器,放不少的數據指針
集合的優勢orm
便於靈活的對一組相同類型的對象進行存儲、檢索等管理操做
集合容易使用,它們包括訪問集合元素的索引器和遍歷集合元素的IEnumerable接口
什麼時候用:若是要對緊密相關的、相似的、較多或大量的數據對象進行有效的處理時,能夠用集合
如:搜索。排序、反轉、找最大或最小值
集合的功能
存儲功能【放>會放】
檢索功能【取>會取】
其它管理功能:不一樣的集合類有所不一樣
集合的學習目標
能熟練的放值
能熟練的取值
能熟練的使用某些集合類型的特定的功能,如:
搜索,排序,反轉,找最大或最小值等。
C#包含的結構
C#的集合【廣義理論上】【c#的數據結構】
C#的集合包含 |
確切叫法 |
習慣叫法 |
區別 |
System.Array及派生類 |
數組 |
固定數組 不可變數字 數組 |
不可變數字 沒有添加,插入、移除的功能 |
System.Collection命名空間中的數據類型 |
非泛型集合 |
集合 |
|
System.Collection.Generic命名空間中數據類型 |
泛型集合 |
泛型集合 |
泛型集合包含的類與非泛型包含的類基本一一對應,是來取代非泛型集合對應的類的 泛型集合提供了更高的類型安全性和效率 |
非泛型集合-內容
System.Collections 簡介
使用System.Collections.ArrayList對象
使用System.Collections.Hashtable哈希表對象
ArrayList類【數組列表】
System.Collections.ArrayList類與一維數組相似,主要有如下不一樣:、
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();
}
}
Queue和Stack
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代替