C學習第9章數(shù)組和集合_第1頁
C學習第9章數(shù)組和集合_第2頁
C學習第9章數(shù)組和集合_第3頁
C學習第9章數(shù)組和集合_第4頁
C學習第9章數(shù)組和集合_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第9章數(shù)組和集合C#語言提供了好多數(shù)據(jù)結構,使用它們能給我們編程帶來了很大的方便。它們包括數(shù)組、ArrayList、Queue、Stack、Hashtable和SortedList等。數(shù)據(jù)結構是由基本類型數(shù)據(jù)按一定規(guī)則組成的,學習數(shù)據(jù)結構,就是要學會規(guī)則。這一章的主要內(nèi)容如下:數(shù)組的應用集合的應用動態(tài)數(shù)組隊列、堆棧哈希表應用9.1數(shù)組數(shù)組是一種數(shù)據(jù)結構,其中包含一些可透過計算得到之索引來存取的變量。數(shù)組中所包含的變量,又稱為數(shù)組的元素,都具有相同型別,而此型別就叫做數(shù)組的元素型別。數(shù)組具有陣序規(guī)范(RankSpecifier),此陣序規(guī)范可決定與每一個數(shù)組元素關聯(lián)的索引數(shù)目。數(shù)組的陣序規(guī)范也稱為數(shù)組的維度(Dimension)。陣序規(guī)范為1的數(shù)組稱為一維數(shù)組。陣序規(guī)范大于1的數(shù)組則稱為多維數(shù)組。特定大小的多維數(shù)組通常稱為二維數(shù)組、三維數(shù)組等。數(shù)組的每個維度都具有關聯(lián)長度,這個長度是一個大于或等于0的整數(shù)。維度長度不是數(shù)組型別的一部分,而是在執(zhí)行階段產(chǎn)生數(shù)組型別(ArrayType)執(zhí)行個體時所建立。維度長度決定該維度的有效索引范圍:長度為N的維度,索引范圍是從0至N–1。9.1.1應用一維數(shù)組數(shù)組必須先定義,后使用。數(shù)組的定義采用以下方式:<type>[]<name>其中Type可以是任意的類型,name是數(shù)組的名稱。數(shù)組可以通過兩種方式進行初始化,第一種方式是完整的指定數(shù)組的內(nèi)容;第二種方式是指定數(shù)組的長度,并使用new關鍵字初始化所有的數(shù)組元素。int[]intArray={1,2,3}等價于:int[]intArrayintArray={1,2,3};9.1.2應用二維數(shù)組和多維數(shù)組數(shù)組可以有多個維度,當為二個維度時,就叫二維數(shù)組。不管它有幾個維度,與一維數(shù)組沒多大差別。每行長度相同的數(shù)組稱為矩形數(shù)組。每行長度不同的數(shù)組叫鋸齒型數(shù)組。聲明一個二維的矩形數(shù)組的語法為:type[,]arraryName=newtype[numberRows,numberCols];9.1.3應用交錯數(shù)組數(shù)組的元素不僅可以是同一種類型的數(shù)值,同時還可以是數(shù)組。元素為數(shù)組的數(shù)組,就叫交錯數(shù)組,每個元素緯度和大小可以不同。要創(chuàng)建一個行數(shù)固定,列數(shù)可變的數(shù)組,語法為:Type[][[]arrayName=newtype[numberRows][];arrnyName[0]=newtype[numberCols0];arrnyName[1]=newtype[numberCols1];arrnyName[2]=newtype[numberCols2];arrnyName[numberRows-1]=newtype[numberCols];或者:arraryName=newtype[3]{newint[numberCols0],newint[numberCols0],newint[numberCols0]};

9.2數(shù)組使用在程序設計方面,數(shù)組的用途非常大。為了方便用戶的使用,C#提供了許多屬性和方法等來支持數(shù)組的操作。要想學好數(shù)組,對這些方法和屬性的掌握是十分必要的。9.2.1數(shù)組簡單應用System.Array類是C#語言中各種數(shù)組的基類。1.數(shù)組的索引2.數(shù)組遍歷屬性/方法說明IsFixedSize指示Array是否具有固定大小。Length獲得一個32位整數(shù),表示Array的所有維數(shù)中元素的總數(shù)Rank獲取Array的秩(維數(shù))SyncRoot獲取可用于同步對Array的訪問的對象BinarySearch使用二進制搜索算法在一維的排序Array中搜索值Clone創(chuàng)建Array的淺表副本Copy/CopyTo將一個Array的一部分復制到另一個Array中GetLength獲取一個32位整數(shù),表示Array的指定維中的元素。GetLowerBound/GetUpperBound獲取Array的指定維度的下/上限GetValue/SetValue獲取/設置Array中的指定元素值IndexOf/LastIndexOf返回一維Array或部分Array中某個值第一個/最后一個匹配項索引Sort對一維Array對象中的元素進行排序9.2.2數(shù)組元素的清空由于數(shù)組的大小是不可以變的,因為其是在初始化時就已經(jīng)確定,因此數(shù)組元素的清空只將部分元素設置為0、False、或空,這和數(shù)組元素的類型有關。為此,C#中提供了Array.Clear()方法。Array.Clear方法的定義如下:publicstaticvoidClear(Arrayarray,intindex,intlength)參數(shù)Array為要進行刪除操作的數(shù)組,index為要清除的一系列的起始索引,length為要清除的元素數(shù)。9.2.3數(shù)組元素的查找C#為數(shù)組提供了Array.IndexOf和Array.LastIndexOf方法,用于查找數(shù)組中的元素。Array.IndexOf方法的定義如下:Array.IndexOf(Array,,Object)Array.IndexOf(Array,Object,Int32)Array.IndexOf(Array,Object,Int32,Int32)以上三種方法分別提供搜索指定的對象Object,第一種方法返回數(shù)組Array中從開始元素到最后一個元素這部分元素中第一個匹配項的索引;而第二種方法返回的是從指定索引開始到最后一個元素間這部分元素中搜索到索引;第三種方法返回的是從指定索引開始指定個數(shù)的元素中搜索到索引。9.2.4數(shù)組元素的排序雖然遍歷的方法可以對數(shù)組進行排序,但是卻非常麻煩。因此C#提供了用于排序的方法Array.Sort和Array.Reverse,Array.Sort方法用于對一維數(shù)組對象中的元素進行排序,Array.Reverse方法用于反轉一維數(shù)組對象中元素的順序。Array.Sort方法的定義如下。publicstaticvoidSort(Arrayarray)publicstaicvoidSort(Arrayarray,Intindex,Intlength)9.3集合C#語言提供了許多方法來實現(xiàn)集合。我們在上一節(jié)中討論了標準的C#數(shù)組語法,在本小節(jié)中,我們將要學習System.Collections命名空間所包含的接口。這些接口為所有的C#集合類型定義了框架。9.3.1ICollection接口基本知識ICollection接口定義了對所有集合類通用的屬性和方法。其被接口IList和Idictionary繼承,由類ArrayList、CollectionBase、DictionaryBase、Hashtable、Queue、SortedList和Stack實現(xiàn)。屬性說明Count返回ICollection所包含的元素數(shù)IsSynchronized當同步訪問ICollection時,返回trueSyncRoot返回一個能用來同步訪問ICollection的對象9.3.2IEnumerable接口和IEnumerator接口的基本知識IEnumerable接口聲明了一個方法支持對集合進行簡單的遍歷。大部分表示一個元素序列或元素集合的類都將實現(xiàn)這個接口。IEnumerator接口定義了一些屬性和方法允許一個枚舉器對集合進行簡單的遍歷。任何作為枚舉器使用的類都將實現(xiàn)這個接口。接口IEnumerable的定義格式如下:publicinterfaceIEnumerable其有一個公有實例方法:IEnumeratorGetEnumerator()GetEnumerator()返回一個用于遍歷一個集合元素的枚舉器。9.4動態(tài)數(shù)組類ArrayList代表一個能根據(jù)需要動態(tài)增加大小的一維數(shù)組,同時其能包含任何托管類型的元素,而且不要求所有元素都是相同的類型。當需要建立一個對象數(shù)組模型卻不知道對象數(shù)量時,它們會非常有用。9.4.1ArrayList的簡單使用ArrayList對象是較為復雜的數(shù)組。ArrayList類提供了多數(shù)System.Collections類都提供的功能,但這些功能在數(shù)組類中沒提供。可以將ArrayList看作是擴充了功能的數(shù)組。但其不同于數(shù)組,其區(qū)別如下:數(shù)組的容量是固定的,而ArrayList的容量可根據(jù)需要自動擴充。ArrayList提供了添加、插入等功能,而數(shù)組卻沒有。ArrayList只提供一維的形式,而數(shù)組可以是多維的。9.4.1ArrayList的簡單使用屬性說明Capacity獲取或設置ArrayList包含的元素數(shù)Count獲取ArrayList實際包含的元素數(shù)IsFixedSize獲取一個值,該值指示ArrayList是否具有固定的大小IsSynchronized獲取一個值,該值指示是否同步對的Array訪問IsReadOnly獲取一個值,該值指示ArrayList是否為只讀Item獲取或設置指定索引處的元素SyncRoot獲取可用于同步ArrayList訪問的對象9.4.2ArrayList元素的添加C#中為ArrayList提供了元素添加的方法,其為ArrayList.Add()。ArrayList.Add方法的定義如下:publicvirtualintAdd(Object)9.4.3ArrayList元素的插入C#中為ArrayList提供了元素插入的方法ArrayList.Insert()。ArrayList.Insert方法的定義如下:publicvirtualvoidInsert(Intindex,Objectvalue)9.4.4ArrayList元素的刪除C#中為ArrayList提供了元素刪除的方法ArrayList.Clear()。ArrayList.Clear方法的定義如下:publicvirtualvoidClear( )該方法是從調(diào)用ArrayList對象中刪除了所有元素。即Count屬性被設為0,但其容量Capacity屬性卻不變。9.4.5ArrayList元素的查找同數(shù)組一樣,ArrayList中也提供了查找其元素的方法,即ArrayList.IndexOf()方法、ArrayList.LastIndexOf()方法和ArrayLst.Contains()方法。由于前兩種方法同Array中同名方法的用法基本相同,所以就不一一介紹了,Contains()的定義如下:publicvirtualboolcontains(Objectitem)該方法通過對ArrayList的元素執(zhí)行一次線性查找,確定調(diào)用ArrayList是否包含指定的對象。如果找到對象,方法返回true。9.4.6ArrayList元素的遍歷列表可以使用同數(shù)組相同的方法對ArrayList進行遍歷,即foreach語句。9.4.7ArrayList容量的縮減C#語言提供了TrimToSize方法來縮減ArrayList容量,其定義如下:publicvirtualvoidTrimToSize()該方法用來縮減ArrayList的容量,使它等于ArrayList中的元素數(shù)。如果ArrayList是只讀或大小固定的,將拋出一個NotSupportedException異常。9.4.8ArrayList向Array的轉換C#語言提供了兩種方法,使ArrayList轉換為Array。分別為ArrayList.ToArray()和ArrayList.ToArray(Type)。其中,第一種方法的定義如下:publicvirtualobject[]ToArray()該方法是將ArrayList轉換為一個object數(shù)組。如果想轉換為固定類型的Array,就該采用第二種方法,但必須設置Type。其定義如下:publicvirtualArrayToArray(Typetype)9.5隊列Queue類通常稱為隊列,它封裝了一個先進先出的集合,隊列用來儲存已入隊的先后順序進行處理的對象。9.5.1Queue簡單介紹在隊列中,每個Queue對象都有一個容量,如果存儲的元素達到了它的容量,這個容量還會自動地增加。Queue對象還具有一個增長系數(shù),它表示了當Queue滿時容量的增加值。這個系數(shù)可以在Queue的構造函數(shù)中設定,默認值為20。Queue是一個比較簡單的類型,其構造函數(shù)就有4種,下面我們逐一介紹其構造函數(shù),供讀者參考:Queue()。Queue(Icollectionc)。Queue(intcapacity)。Queue(intcapacity,floatgrowthFactor)。9.5.2Queue類元素的添加和輸出Queue類常用的屬性如表9-4所示。屬性說明Count返回Queue中包含的元素數(shù)。IsReadOnly在Queue為只讀時返回true。IsSynchronized指定對Queue的訪問是否同步,默認值為false。SyncRoot其提供對Queue的同步訪問。9.6堆棧類Stack類通常稱為堆棧,它封裝了一個先進后出的集合,堆棧與類Queue相似,用來儲存已入隊的反向順序進行處理的對象。9.6.1Stack簡單介紹在堆棧中,每個Stack對象都有一個容量,如果存儲的元素達到了它的容量,這個容量還會自動地增加。Stack是一個比較簡單的類型,其構造函數(shù)就有3種,下面我們逐一介紹其構造函數(shù),供讀者參考:Stack()。Stack(ICollectionc)。Stack(intcapacity)。9.6.2Stack類元素的添加和輸出Stack集合的常用屬性如表9-6所示。屬性說明Count檢索包中包含的元素IsReadOnly在Stack為只讀時返回true,默認值為falseIsSynchronized指定對Stack對象的訪問是否為同步,默認值為falseSyncRoot其提供了對Stack的同步訪問9.7哈希表HashTable通常稱為哈希表,它表示鍵(key)/值(value)對的集合,這些鍵/值對根據(jù)鍵的哈稀代碼進行組織。一個對象的哈稀代碼可以通過使用IhashCodeProvider接口的實現(xiàn)來獲得。9.7.1Hashtable簡單使用在哈希表中,鍵不能為空引用,但值可以。其就像一個字典,可以根據(jù)鍵查到相應的值。Hashtable中的每一個元素都是一個DictionaryEntry結構,而與鍵和值無關。Hashtable是一個比較復雜的類型,其構造函數(shù)就有16種之多,這里只介紹兩種常用的,供讀者參考:Hashtable()。Hashtable(Int32)。9.7.2Hashtable元素的添加C#為HashTable元素的添加提供了Hashtable.Add方法。其定義如下:publicvirtualvoidAdd(Objectkey,Objectvalue)該方法中,key為要添加的元素的鍵;value為要添加元素的值。9.7.3Hashtable元素的獲取9.7.4Hashtable元素的遍歷C#中提供了foreach語句對Hashtable進行遍歷。因為Hashtable的元素是一個鍵/值對,所以使用DictionaryEntry類型來進行遍歷。DictionaryEntry表示一個鍵/值的集合。9.7.5Hashtable元素的刪除C#中為Hashtable提供了元素刪除的方法Hashtable.Clear()。Hashtable.Clear方法的定義如下:publicvirtualvoidClear( )該方法是從調(diào)用Hashtable對象中刪除了所有元素。即Count屬性被設為0。9.7.6HashTable元素的查找C#中為HashTable的查找提供了以下方法:HashTable.Contains方法。HashTable.ContainsKey方法。HashTable.ContainsValue方法。9.7.7SortedList的簡單介紹SortedList與HashTable一樣,都是封裝了一個鍵/值對的集合,但是集合中的內(nèi)容已按照鍵進行了排序。所以SortedList除了可以通過鍵訪問外,還可以通過下標來訪問。SortedList使用兩個數(shù)組來存儲列表的元素:一個用來存儲鍵,一個用來存儲值。鍵通常是字符串型的,并根據(jù)字母順序進行排序。因為需要排序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論