C#编程利器之五:集合对象(Collections)
?????C#里面的集合對(duì)象,是一個(gè)很重要的知識(shí)點(diǎn).可以說沒有人編程不使用集合.這里我不打算過多的去介紹理論相關(guān)的知識(shí),下面和大家分享和學(xué)習(xí)一下在平時(shí)開發(fā)中的常用集合對(duì)象,以及他們之間的關(guān)系.
?
?????記得教科書上有這樣一句話:"如果需要使用同一類型的多個(gè)對(duì)象,就可以使用集合和數(shù)組。" ,是的,沒有錯(cuò).只是數(shù)組的大小是固定的。如果元素個(gè)數(shù)是動(dòng)態(tài)的,就應(yīng)使用集合類。在.NET Framework里,集合有很多,如List<T>和ArrayList是與數(shù)組相當(dāng)?shù)募项悺_€有其他類型的集合:隊(duì)列、棧、鏈表和字典。本文不會(huì)對(duì)這些集合對(duì)象作詳細(xì)的介紹,只是把常用的集合對(duì)象拿出來討論一下。
?
一、數(shù)組
?????在實(shí)際應(yīng)用中,數(shù)組又可分為:簡(jiǎn)單數(shù)組、多維數(shù)組、鋸齒數(shù)組、Array數(shù)組.使用最多的應(yīng)該算的簡(jiǎn)單數(shù)組和多維數(shù)組,這里我以簡(jiǎn)單數(shù)組為例簡(jiǎn)單介紹下數(shù)組的簡(jiǎn)單使用,關(guān)于的其他知識(shí)點(diǎn)請(qǐng)大家參考相關(guān)資料和書籍.
?????比如說我們要定義一個(gè)整型的簡(jiǎn)單數(shù)組,那應(yīng)該怎么定義呢?
?1?class?Program?2?{
?3?????static?void?Main(string[]?args)
?4?????{
?5?????????int[]?users?=?new?int[5];
?6?????????users[0]?=?10;
?7?????????users[1]?=?20;
?8?????????//
?9?????}
10?}
?
?????是上面這樣定義和使用的嗎?我想稍微學(xué)過編程的朋友都可以給出肯定的答案.關(guān)于這點(diǎn)我不想作過多的解釋.見下圖:
?????????????????????????????? ?
?
????? 這里我們是使用的基本類型(int)類型來定義的數(shù)組,在使用開發(fā)中我們還會(huì)使用到自定義類型數(shù)組,下面我就簡(jiǎn)單的說說這方面的知識(shí).要定義自定義類型數(shù)組,那么首先就應(yīng)該有個(gè)自定義類型,當(dāng)然這個(gè)類型可以封其他的相關(guān)屬性.OK,如下代碼段:
?1?///?<summary>?2?///?自定義類型User,內(nèi)部封裝了一個(gè)屬性name.
?3?///?</summary>
?4?public?class?User
?5?{
?6?????private?string?name;
?7?????public?string?Name
?8?????{
?9?????????get?{?return?name;?}
10?????????set?{?name?=?value;?}
11?????}
12?}
?
?????如上就是一個(gè)自定義的類型,我們?cè)谄鋬?nèi)部封裝了一個(gè)name屬性.那么,類型已經(jīng)定義好,那我們應(yīng)該如何去使用這個(gè)自定義類型去定義一個(gè)數(shù)組呢?是這樣的嗎?
?1?class?Program?2?{
?3?????static?void?Main(string[]?args)
?4?????{
?5?????????User[]?user?=?new?User[2]; //定義User類型的數(shù)組
?6?????????User?u?=?new?User();
?7?????????u.Name="Beniao";
?8?????????user[0]?=?u;
?9?????????Console.WriteLine(user[0].Name);
10?????}
11?}
?
?????如上我們就完成了一個(gè)自定義類型的對(duì)象數(shù)組的定義,以及數(shù)組的相關(guān)操作.見下圖:
????????????????
?????由于多維數(shù)組、鋸齒數(shù)組、Array數(shù)組等數(shù)組在實(shí)際的開發(fā)中使用不是很多,這里就不作介紹.
?
二、集合對(duì)象
?????集合類可以組合為集合,存儲(chǔ)Object類型的元素和泛型集合類。在.NET 2.0之前,不存在泛型。現(xiàn)在泛型集合類通常是集合的首選類型。泛型集合類是類型安全的,如果使用值類型,是不需要裝箱操作的。如果要在集合中添加不同類型的對(duì)象,且這些對(duì)象不是相互派生的,例如在集合中添加int和string對(duì)象,就只需基于對(duì)象的集合類。
?
?????象類型的集合位于System.Collections命名空間;泛型集合類位于System.Collections. Generic命名空間;當(dāng)然,組合集合類還有其他方式。集合可以根據(jù)集合類執(zhí)行的接口組合為列表、集合和字典。接口及其功能如表10-1所示。.NET 2.0為集合類添加了新的泛型接口,例如IEnumerable<T>和IList<T>。這些接口的非泛型版本將一個(gè)對(duì)象定義為方法的參數(shù),而其泛型版本使用泛型類型T。
?
?????1. 列表
?????.NET Framework為動(dòng)態(tài)列表提供了類ArrayList和List<T>。System.Collections.Generic命名空間中的類List<T>的用法非常類似于System.Collections命名空間中的ArrayList類。這個(gè)類實(shí)現(xiàn)了IList、ICollection和IEnumerable接口。如下代碼段:
?1?class?Program?2?{
?3?????static?void?Main(string[]?args)
?4?????{
?5?????????//創(chuàng)建列表
?6?????????ArrayList?list?=?new?ArrayList();
?7?????????//添加元素
?8?????????list.Add("張三");
?9?????????//插入元素
10?????????list.Insert(1,?"李四");
11?????????//訪問元素
12?????????string?name?=?list[0].ToString();
13?????????//刪除元素
14?????????list.RemoveAt(1);?//刪除索引號(hào)為1的元素?|?Remove(Object?obj);
15?????????//檢索元素
16?????????int?index?=?list.IndexOf("張三");??//得到對(duì)象所在的下標(biāo)
17?????????//排序元素
18?????????list.Sort();??//有多種重載
19?
20?????????List<int>?l?=?new?List<int>();???//創(chuàng)建列表
21?????????l.Add(1);????????????????????????//添加元素
22?????????l.Add(7);
23?????????l.Add(3);
24?????????l.Add(9);
25?????????l.Add(6);
26?????????l.Add(10);
27?????????l.Sort();
28?????????foreach?(int??i?in?l)
29?????????{
30?????????????Console.Write(i+"?");
31?????????}
32?
33?????????l.Remove(10);??//刪除值為10的元素
34?????}
35?}
?
?????關(guān)于列表的算法可以參考我以前寫過的一篇文章,文章連接:列表算法?
?
?????2. 隊(duì)列
?????隊(duì)列是其元素以先進(jìn)先出(FIFO)的方式來處理的集合。先放在隊(duì)列中的元素會(huì)先讀取。可結(jié)合下圖來理解:
??????????????? ?????
?????在.NET的System.Collections命名空間中有非泛型類Queue,在System.Collections. Generic命名空間中有泛型類Queue<T>。這兩個(gè)類的功能非常類似,但泛型類是強(qiáng)類型化的,定義了類型T,而非泛型類基于Object類型。
?????在創(chuàng)建隊(duì)列時(shí),可以使用與List<T>類型類似的構(gòu)造函數(shù)。默認(rèn)的構(gòu)造函數(shù)會(huì)創(chuàng)建一個(gè)空隊(duì)列,也可以使用構(gòu)造函數(shù)指定容量。在把元素添加到隊(duì)列中時(shí),容量會(huì)遞增,包含4、8、16和32個(gè)元素。與List<T>類型類似,隊(duì)列的容量也總是根據(jù)需要成倍增加。非泛型類Queue的默認(rèn)構(gòu)造函數(shù)與此不同,它會(huì)創(chuàng)建一個(gè)包含32項(xiàng)的空數(shù)組。
?
?????不過一般項(xiàng)目中用得不是很多,這里故不做示例代碼.
?
?????3.鏈表
??????鏈表算發(fā)其實(shí)也很簡(jiǎn)單,因?yàn)轫?xiàng)目開發(fā)中使用頻率不高,所以這里就不做詳細(xì)介紹.可參考以前我寫的關(guān)于鏈表算法的一篇文章,文章連接: 單鏈表?
?
?????關(guān)于結(jié)合對(duì)象我就簡(jiǎn)單的介紹這些,另外還有如棧,字典等集合對(duì)象,在某些時(shí)候也會(huì)用到,詳細(xì)大家可以查閱相關(guān)書籍和資料.
?????這里我推薦一本書,大家有興趣的可以看看《C# 2005 & .NET 3.0高級(jí)編程(第5版) 》。
轉(zhuǎn)載于:https://www.cnblogs.com/beniao/archive/2008/08/07/1249034.html
總結(jié)
以上是生活随笔為你收集整理的C#编程利器之五:集合对象(Collections)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS收集:限制输入格式
- 下一篇: 可以在某些场合替代onload事件的do