程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#編程利器之五:集合對象(Collections)

C#編程利器之五:集合對象(Collections)

編輯:關於C#

記得教科書上有這樣一句話:"如果需要使用同一類型的多個對象,就可以使用集合和數組。" ,是的, 沒有錯.只是數組的大小是固定的。如果元素個數是動態的,就應使用集合類。在.NET Framework裡,集 合有很多,如List<T>和ArrayList是與數組相當的集合類。還有其他類型的集合:隊列、棧、鏈表 和字典。本文不會對這些集合對象作詳細的介紹,只是把常用的集合對象拿出來討論一下。

一、數組

在實際應用中,數組又可分為:簡單數組、多維數組、鋸齒數組、Array數組.使用最多的應該算的簡 單數組和多維數組,這裡我以簡單數組為例簡單介紹下數組的簡單使用,關於的其他知識點請大家參考相關 資料和書籍.

比如說我們要定義一個整型的簡單數組,那應該怎麼定義呢?

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 }

是上面這樣定義和使用的嗎?我想稍微學過編程的朋友都可以給出肯定的答案.關於這點我不想作過多 的解釋.見下圖:

這裡我們是使用的基本類型(int)類型來定義的數組,在使用開發中我們還會使用到自定義類型數組,下 面我就簡單的說說這方面的知識.要定義自定義類型數組,那麼首先就應該有個自定義類型,當然這個類型 可以封其他的相關屬性.OK,如下代碼段:

 1 /// <summary>
 2 /// 自定義類型User,內部封裝了一個屬性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 }

如上就是一個自定義的類型,我們在其內部封裝了一個name屬性.那麼,類型已經定義好,那我們應該如 何去使用這個自定義類型去定義一個數組呢?是這樣的嗎?

 1 class Program
 2 {
 3     static void Main(string[] args)
 4     {
 5         User[] user = new User[2]; //定義User類型的數組
 6         User u = new User();
 7         u.Name="Beniao";
 8         user[0] = u;
 9         Console.WriteLine(user[0].Name);
10     }
11 }

如上我們就完成了一個自定義類型的對象數組的定義,以及數組的相關操作.見下圖:

由於多維數組、鋸齒數組、Array數組等數組在實際的開發中使用不是很多,這裡就不作介紹.

二、集合對象

集合類可以組合為集合,存儲Object類型的元素和泛型集合類。在.NET 2.0之前,不存在泛型。現在 泛型集合類通常是集合的首選類型。泛型集合類是類型安全的,如果使用值類型,是不需要裝箱操作的。 如果要在集合中添加不同類型的對象,且這些對象不是相互派生的,例如在集合中添加int和string對象 ,就只需基於對象的集合類。

象類型的集合位於System.Collections命名空間;泛型集合類位於System.Collections. Generic命名 空間;當然,組合集合類還有其他方式。集合可以根據集合類執行的接口組合為列表、集合和字典。接口 及其功能如表10-1所示。.NET 2.0為集合類添加了新的泛型接口,例如IEnumerable<T>和 IList<T>。這些接口的非泛型版本將一個對象定義為方法的參數,而其泛型版本使用泛型類型T。

1. 列表

.NET Framework為動態列表提供了類ArrayList和List<T>。System.Collections.Generic命名 空間中的類List<T>的用法非常類似於System.Collections命名空間中的ArrayList類。這個類實現 了IList、ICollection和IEnumerable接口。如下代碼段:

 1 class Program
 2 {
 3     static void Main(string[] args)
 4     {
 5         //創建列表
 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); //刪除索引號為1的元素 | Remove(Object obj);
15         //檢索元素
16         int index = list.IndexOf("張三");  //得到對象所在的下標
17         //排序元素
18         list.Sort();  //有多種重載
19 
20         List<int> l = new List<int>();   //創建列表
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 }

關於列表的算法可以參考我以前寫過的一篇文章,文章連接:列表算法

2. 隊列

隊列是其元素以先進先出(FIFO)的方式來處理的集合。先放在隊列中的元素會先讀取。可結合下圖來 理解:

在.NET的System.Collections命名空間中有非泛型類Queue,在System.Collections. Generic命名空 間中有泛型類Queue<T>。這兩個類的功能非常類似,但泛型類是強類型化的,定義了類型T,而非 泛型類基於Object類型。

在創建隊列時,可以使用與List<T>類型類似的構造函數。默認的構造函數會創建一個空隊列, 也可以使用構造函數指定容量。在把元素添加到隊列中時,容量會遞增,包含4、8、16和32個元素。與 List<T>類型類似,隊列的容量也總是根據需要成倍增加。非泛型類Queue的默認構造函數與此不同 ,它會創建一個包含32項的空數組。

不過一般項目中用得不是很多,這裡故不做示例代碼.

3.鏈表

鏈表算發其實也很簡單,因為項目開發中使用頻率不高,所以這裡就不做詳細介紹.

關於結合對象我就簡單的介紹這些,另外還有如棧,字典等集合對象,在某些時候也會用到,詳細大家可 以查閱相關書籍和資料.

這裡我推薦一本書,大家有興趣的可以看看《C# 2005 & .NET 3.0高級編程(第5版) 》。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved