關於C#中集合和數組(一)


很多同學在學習《使用集合組織相關數據》一章時,出現了很多不理解的地方,動手編碼的時候出現很多的錯誤,現在我將數組與集合的相關的內容總結了一下,希望能給你們的學習帶來相應的幫助。

在.NET Framework中提供了很多集合類,如ArrayList、Hashtable、SortedList、ListDictionary、Queue、NameValueCollection、List<T>、Dictionary<TKey,TValue>及數組等,要了解各個集合的特性,選擇合適的集合。

在所有的集合中數組是性能最高的,如果要存儲的數據類型一致和容量固定,特別是對值類型的數組進行操作時沒有裝箱和拆箱操作,效率極高。

在選擇集合類型時應考慮幾點:

(1)集合中的元素類型是否是一致的,比如集合中將要存儲的元素都是int或者都是string類型的就可以考慮使用數組或者泛型集合,這樣在存儲數值類型元素就可以避免裝箱拆箱操作,即使是引用類型的元素也可以避免類型轉換操作。

(2)集合中的元素個數是否是固定的,如果集合中存儲的元素是固定的並且元素類型是一致的就可以使用數組來存儲。

(3)將來對集合的操作集中在那些方面,如果對集合的操作以查找居多可以考慮HashTable或者Dictionary<TKey,TValue>這樣的集合,因為在.NETFramework中對這類集合采用了特殊機制,所以在查找時比較的次數比其它集合要少。

另外,在使用可變集合時如果不制定初始容量大小,系統會使用一個默認值來指定可變集合的初始容量大小,如果將來元素個數超過初始容量大小就會先在內部重新構建一個集合,再將原來集合中的元素復制到新集合中,可以在實例化可變集合時指定一個相對較大的初始容量,這樣在向可變集合中添加大量元素時就可以避免集合擴充容量帶來的性能損失。

System.Collections 命名空間包含接口和類,這些接口和類定義各種對象(如列表、隊列、位數組、哈希表和字典)的集合。

System.Collections.Generic 命名空間包含定義泛型集合的接口和類,泛型集合允許用戶創建強類型集合,它能提供比非泛型強類型集合更好的類型安全性和性能。

System.Collections.Specialized 命名空間包含專用的和強類型的集合,例如,鏈接的列表詞典、位向量以及只包含字符串的集合。

 

數組

數組是大部分編程語言中都支持的一種數據類型,無論C語言、C++還是C#以及Java

都支持數組的概念。

數組是具有同一類型的多個對象的集合,是一種數據結構,包含同一類型的多個元素。數組是一組具有相同類型的變量的集合,如一組整數、一組字符等。組成數組的這些變量稱為數組的元素。每個數組元素都有一個編號,這個編號叫做下標,C#中的下標是從0開始的,最大的下標等於數組元素個數減一。C#中可以通過下標來區別這些元素。數組元素的個數有時也稱之為數組的長度。

數組類型從類型System.Array繼承而來。System.Array類表示所有的數組,不論這些數組的元素類型或秩如何。對數組定義的操作有:根據大小和下限信息分配數組;編制數組索引以讀取或寫入值;計算數組元素的地址;以及查詢秩、邊界和數組中存儲的值的總數。

1、  數組是固定大小的,不能伸縮。雖然System.Array.Resize這個泛型方法可以重置數組大小,但是該方法是重新創建新設置大小的數組,用的是舊數組的元素初始化。隨后以前的數組就廢棄!而集合卻是可變長的。

2、 數組要聲明元素的類型,集合類的元素類型卻是object。

3、 數組可讀可寫,不能聲明只讀數組。集合類可以提供ReadOnly方法以只讀方式使用集合。

4、 數組要有整數下標才能訪問特定的元素,然而很多時候這樣的下標並不是很有用。集合也是數據列表卻不使用下標訪問。很多時候集合有定制的下標類型,對於隊列和棧根本就不支持下標訪問!

1. 定義

一個數組的定義中包含以下幾個要素:

Ø  元素類型(相同)

Ø  數組的維數(初始化時必須給定)

Ø  每個維數的上下限

首先,給定類型的數組只能保存該類型的元素。其次要規定數組的維數,可以用幾何的知識理解數組的維數,可以用一維坐標軸來理解一維數組;用平面直角坐標系來理解二維數組;用三維立體坐標系來理解三維數組等。再次,數組必須規定每個維數的大小。

如:

int[] anIntArray;    //定義數組

anIntArray={1,2,3};//上述代碼定義了一個數組並對其進行了初始化。可以一次完成

int [] sz=newint[];  //初始化數組,如果不指定大小,報語法錯誤。

anIntArray=new  int[]{1,2,3};//用new關鍵字初始化數組的元素

anIntArray=new  int[3]{1,2,3};//指定數組大小用new關鍵字初始化數組元素

數組還有另外一種初始化方式,即指定數組大小並用new關鍵字初始化數組的元素:

int[] anIntArray=new int[3];

執行時.NET將會為數組中的每一個元素賦予同一個(定義類型的)默認值。對於Int型的變量來說這個默認值是0。

2、數組的索引

數組的索引也就是通常所說的數組下標,英文為Index。數組的索引是從0開始的。

3、數組的遍歷

C#提供了foreach語句以實現數組的遍歷功能。可以使用foreach語句訪問數組中的每個元素而不需要確切地知道每個元素的索引。

int[] myArray=newint[5]  {14, 25, 7,36, 53};

//采用foreach語句對myArray進行遍歷

foreach(int numberinmyArray)

Console.Write(number);

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

Console.Write(myArray[i]);


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com