版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章數(shù)組和集合C#語言提供了好多數(shù)據(jù)結(jié)構(gòu),使用它們能給我們編程帶來了很大的方便。它們包括數(shù)組、ArrayList、Queue、Stack、Hashtable和SortedList等。數(shù)據(jù)結(jié)構(gòu)是由基本類型數(shù)據(jù)按一定規(guī)則組成的,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),就是要學(xué)會(huì)規(guī)則。這一章的主要內(nèi)容如下:數(shù)組的應(yīng)用集合的應(yīng)用動(dòng)態(tài)數(shù)組隊(duì)列、堆棧哈希表應(yīng)用9.1數(shù)組數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),其中包含一些可透過計(jì)算得到之索引來存取的變量。數(shù)組中所包含的變量,又稱為數(shù)組的元素,都具有相同型別,而此型別就叫做數(shù)組的元素型別。數(shù)組具有陣序規(guī)范(RankSpecifier),此陣序規(guī)范可決定與每一個(gè)數(shù)組元素關(guān)聯(lián)的索引數(shù)目。數(shù)組的陣序規(guī)范也稱為數(shù)組的維度(Dimension)。陣序規(guī)范為1的數(shù)組稱為一維數(shù)組。陣序規(guī)范大于1的數(shù)組則稱為多維數(shù)組。特定大小的多維數(shù)組通常稱為二維數(shù)組、三維數(shù)組等。數(shù)組的每個(gè)維度都具有關(guān)聯(lián)長(zhǎng)度,這個(gè)長(zhǎng)度是一個(gè)大于或等于0的整數(shù)。維度長(zhǎng)度不是數(shù)組型別的一部分,而是在執(zhí)行階段產(chǎn)生數(shù)組型別(ArrayType)執(zhí)行個(gè)體時(shí)所建立。維度長(zhǎng)度決定該維度的有效索引范圍:長(zhǎng)度為N的維度,索引范圍是從0至N–1。9.1.1應(yīng)用一維數(shù)組數(shù)組必須先定義,后使用。數(shù)組的定義采用以下方式:<type>[]<name>其中Type可以是任意的類型,name是數(shù)組的名稱。數(shù)組可以通過兩種方式進(jìn)行初始化,第一種方式是完整的指定數(shù)組的內(nèi)容;第二種方式是指定數(shù)組的長(zhǎng)度,并使用new關(guān)鍵字初始化所有的數(shù)組元素。int[]intArray={1,2,3}等價(jià)于:int[]intArrayintArray={1,2,3};9.1.2應(yīng)用二維數(shù)組和多維數(shù)組數(shù)組可以有多個(gè)維度,當(dāng)為二個(gè)維度時(shí),就叫二維數(shù)組。不管它有幾個(gè)維度,與一維數(shù)組沒多大差別。每行長(zhǎng)度相同的數(shù)組稱為矩形數(shù)組。每行長(zhǎng)度不同的數(shù)組叫鋸齒型數(shù)組。聲明一個(gè)二維的矩形數(shù)組的語法為:type[,]arraryName=newtype[numberRows,numberCols];9.1.3應(yīng)用交錯(cuò)數(shù)組數(shù)組的元素不僅可以是同一種類型的數(shù)值,同時(shí)還可以是數(shù)組。元素為數(shù)組的數(shù)組,就叫交錯(cuò)數(shù)組,每個(gè)元素緯度和大小可以不同。要?jiǎng)?chuàng)建一個(gè)行數(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è)計(jì)方面,數(shù)組的用途非常大。為了方便用戶的使用,C#提供了許多屬性和方法等來支持?jǐn)?shù)組的操作。要想學(xué)好數(shù)組,對(duì)這些方法和屬性的掌握是十分必要的。9.2.1數(shù)組簡(jiǎn)單應(yīng)用System.Array類是C#語言中各種數(shù)組的基類。1.?dāng)?shù)組的索引2.?dāng)?shù)組遍歷屬性/方法說明IsFixedSize指示Array是否具有固定大小。Length獲得一個(gè)32位整數(shù),表示Array的所有維數(shù)中元素的總數(shù)Rank獲取Array的秩(維數(shù))SyncRoot獲取可用于同步對(duì)Array的訪問的對(duì)象BinarySearch使用二進(jìn)制搜索算法在一維的排序Array中搜索值Clone創(chuàng)建Array的淺表副本Copy/CopyTo將一個(gè)Array的一部分復(fù)制到另一個(gè)Array中GetLength獲取一個(gè)32位整數(shù),表示Array的指定維中的元素。GetLowerBound/GetUpperBound獲取Array的指定維度的下/上限GetValue/SetValue獲取/設(shè)置Array中的指定元素值IndexOf/LastIndexOf返回一維Array或部分Array中某個(gè)值第一個(gè)/最后一個(gè)匹配項(xiàng)索引Sort對(duì)一維Array對(duì)象中的元素進(jìn)行排序9.2.2數(shù)組元素的清空由于數(shù)組的大小是不可以變的,因?yàn)槠涫窃诔跏蓟瘯r(shí)就已經(jīng)確定,因此數(shù)組元素的清空只將部分元素設(shè)置為0、False、或空,這和數(shù)組元素的類型有關(guān)。為此,C#中提供了Array.Clear()方法。Array.Clear方法的定義如下:publicstaticvoidClear(Arrayarray,intindex,intlength)參數(shù)Array為要進(jìn)行刪除操作的數(shù)組,index為要清除的一系列的起始索引,length為要清除的元素?cái)?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)以上三種方法分別提供搜索指定的對(duì)象Object,第一種方法返回?cái)?shù)組Array中從開始元素到最后一個(gè)元素這部分元素中第一個(gè)匹配項(xiàng)的索引;而第二種方法返回的是從指定索引開始到最后一個(gè)元素間這部分元素中搜索到索引;第三種方法返回的是從指定索引開始指定個(gè)數(shù)的元素中搜索到索引。9.2.4數(shù)組元素的排序雖然遍歷的方法可以對(duì)數(shù)組進(jìn)行排序,但是卻非常麻煩。因此C#提供了用于排序的方法Array.Sort和Array.Reverse,Array.Sort方法用于對(duì)一維數(shù)組對(duì)象中的元素進(jìn)行排序,Array.Reverse方法用于反轉(zhuǎn)一維數(shù)組對(duì)象中元素的順序。Array.Sort方法的定義如下。publicstaticvoidSort(Arrayarray)publicstaicvoidSort(Arrayarray,Intindex,Intlength)9.3集合C#語言提供了許多方法來實(shí)現(xiàn)集合。我們?cè)谏弦还?jié)中討論了標(biāo)準(zhǔn)的C#數(shù)組語法,在本小節(jié)中,我們將要學(xué)習(xí)System.Collections命名空間所包含的接口。這些接口為所有的C#集合類型定義了框架。9.3.1ICollection接口基本知識(shí)ICollection接口定義了對(duì)所有集合類通用的屬性和方法。其被接口IList和Idictionary繼承,由類ArrayList、CollectionBase、DictionaryBase、Hashtable、Queue、SortedList和Stack實(shí)現(xiàn)。屬性說明Count返回ICollection所包含的元素?cái)?shù)IsSynchronized當(dāng)同步訪問ICollection時(shí),返回trueSyncRoot返回一個(gè)能用來同步訪問ICollection的對(duì)象9.3.2IEnumerable接口和IEnumerator接口的基本知識(shí)IEnumerable接口聲明了一個(gè)方法支持對(duì)集合進(jìn)行簡(jiǎn)單的遍歷。大部分表示一個(gè)元素序列或元素集合的類都將實(shí)現(xiàn)這個(gè)接口。IEnumerator接口定義了一些屬性和方法允許一個(gè)枚舉器對(duì)集合進(jìn)行簡(jiǎn)單的遍歷。任何作為枚舉器使用的類都將實(shí)現(xiàn)這個(gè)接口。接口IEnumerable的定義格式如下:publicinterfaceIEnumerable其有一個(gè)公有實(shí)例方法:IEnumeratorGetEnumerator()GetEnumerator()返回一個(gè)用于遍歷一個(gè)集合元素的枚舉器。9.4動(dòng)態(tài)數(shù)組類ArrayList代表一個(gè)能根據(jù)需要?jiǎng)討B(tài)增加大小的一維數(shù)組,同時(shí)其能包含任何托管類型的元素,而且不要求所有元素都是相同的類型。當(dāng)需要建立一個(gè)對(duì)象數(shù)組模型卻不知道對(duì)象數(shù)量時(shí),它們會(huì)非常有用。9.4.1ArrayList的簡(jiǎn)單使用ArrayList對(duì)象是較為復(fù)雜的數(shù)組。ArrayList類提供了多數(shù)System.Collections類都提供的功能,但這些功能在數(shù)組類中沒提供??梢詫rrayList看作是擴(kuò)充了功能的數(shù)組。但其不同于數(shù)組,其區(qū)別如下:數(shù)組的容量是固定的,而ArrayList的容量可根據(jù)需要自動(dòng)擴(kuò)充。ArrayList提供了添加、插入等功能,而數(shù)組卻沒有。ArrayList只提供一維的形式,而數(shù)組可以是多維的。9.4.1ArrayList的簡(jiǎn)單使用屬性說明Capacity獲取或設(shè)置ArrayList包含的元素?cái)?shù)Count獲取ArrayList實(shí)際包含的元素?cái)?shù)IsFixedSize獲取一個(gè)值,該值指示ArrayList是否具有固定的大小IsSynchronized獲取一個(gè)值,該值指示是否同步對(duì)的Array訪問IsReadOnly獲取一個(gè)值,該值指示ArrayList是否為只讀Item獲取或設(shè)置指定索引處的元素SyncRoot獲取可用于同步ArrayList訪問的對(duì)象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對(duì)象中刪除了所有元素。即Count屬性被設(shè)為0,但其容量Capacity屬性卻不變。9.4.5ArrayList元素的查找同數(shù)組一樣,ArrayList中也提供了查找其元素的方法,即ArrayList.IndexOf()方法、ArrayList.LastIndexOf()方法和ArrayLst.Contains()方法。由于前兩種方法同Array中同名方法的用法基本相同,所以就不一一介紹了,Contains()的定義如下:publicvirtualboolcontains(Objectitem)該方法通過對(duì)ArrayList的元素執(zhí)行一次線性查找,確定調(diào)用ArrayList是否包含指定的對(duì)象。如果找到對(duì)象,方法返回true。9.4.6ArrayList元素的遍歷列表可以使用同數(shù)組相同的方法對(duì)ArrayList進(jìn)行遍歷,即foreach語句。9.4.7ArrayList容量的縮減C#語言提供了TrimToSize方法來縮減ArrayList容量,其定義如下:publicvirtualvoidTrimToSize()該方法用來縮減ArrayList的容量,使它等于ArrayList中的元素?cái)?shù)。如果ArrayList是只讀或大小固定的,將拋出一個(gè)NotSupportedException異常。9.4.8ArrayList向Array的轉(zhuǎn)換C#語言提供了兩種方法,使ArrayList轉(zhuǎn)換為Array。分別為ArrayList.ToArray()和ArrayList.ToArray(Type)。其中,第一種方法的定義如下:publicvirtualobject[]ToArray()該方法是將ArrayList轉(zhuǎn)換為一個(gè)object數(shù)組。如果想轉(zhuǎn)換為固定類型的Array,就該采用第二種方法,但必須設(shè)置Type。其定義如下:publicvirtualArrayToArray(Typetype)9.5隊(duì)列Queue類通常稱為隊(duì)列,它封裝了一個(gè)先進(jìn)先出的集合,隊(duì)列用來儲(chǔ)存已入隊(duì)的先后順序進(jìn)行處理的對(duì)象。9.5.1Queue簡(jiǎn)單介紹在隊(duì)列中,每個(gè)Queue對(duì)象都有一個(gè)容量,如果存儲(chǔ)的元素達(dá)到了它的容量,這個(gè)容量還會(huì)自動(dòng)地增加。Queue對(duì)象還具有一個(gè)增長(zhǎng)系數(shù),它表示了當(dāng)Queue滿時(shí)容量的增加值。這個(gè)系數(shù)可以在Queue的構(gòu)造函數(shù)中設(shè)定,默認(rèn)值為20。Queue是一個(gè)比較簡(jiǎn)單的類型,其構(gòu)造函數(shù)就有4種,下面我們逐一介紹其構(gòu)造函數(shù),供讀者參考:Queue()。Queue(Icollectionc)。Queue(intcapacity)。Queue(intcapacity,floatgrowthFactor)。9.5.2Queue類元素的添加和輸出Queue類常用的屬性如表9-4所示。屬性說明Count返回Queue中包含的元素?cái)?shù)。IsReadOnly在Queue為只讀時(shí)返回true。IsSynchronized指定對(duì)Queue的訪問是否同步,默認(rèn)值為false。SyncRoot其提供對(duì)Queue的同步訪問。9.6堆棧類Stack類通常稱為堆棧,它封裝了一個(gè)先進(jìn)后出的集合,堆棧與類Queue相似,用來儲(chǔ)存已入隊(duì)的反向順序進(jìn)行處理的對(duì)象。9.6.1Stack簡(jiǎn)單介紹在堆棧中,每個(gè)Stack對(duì)象都有一個(gè)容量,如果存儲(chǔ)的元素達(dá)到了它的容量,這個(gè)容量還會(huì)自動(dòng)地增加。Stack是一個(gè)比較簡(jiǎn)單的類型,其構(gòu)造函數(shù)就有3種,下面我們逐一介紹其構(gòu)造函數(shù),供讀者參考:Stack()。Stack(ICollectionc)。Stack(intcapacity)。9.6.2Stack類元素的添加和輸出Stack集合的常用屬性如表9-6所示。屬性說明Count檢索包中包含的元素IsReadOnly在Stack為只讀時(shí)返回true,默認(rèn)值為falseIsSynchronized指定對(duì)Stack對(duì)象的訪問是否為同步,默認(rèn)值為falseSyncRoot其提供了對(duì)Stack的同步訪問9.7哈希表HashTable通常稱為哈希表,它表示鍵(key)/值(value)對(duì)的集合,這些鍵/值對(duì)根據(jù)鍵的哈稀代碼進(jìn)行組織。一個(gè)對(duì)象的哈稀代碼可以通過使用IhashCodeProvider接口的實(shí)現(xiàn)來獲得。9.7.1Hashtable簡(jiǎn)單使用在哈希表中,鍵不能為空引用,但值可以。其就像一個(gè)字典,可以根據(jù)鍵查到相應(yīng)的值。Hashtable中的每一個(gè)元素都是一個(gè)DictionaryEntry結(jié)構(gòu),而與鍵和值無關(guān)。Hashtable是一個(gè)比較復(fù)雜的類型,其構(gòu)造函數(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語句對(duì)Hashtable進(jìn)行遍歷。因?yàn)镠ashtable的元素是一個(gè)鍵/值對(duì),所以使用DictionaryEntry類型來進(jìn)行遍歷。DictionaryEntry表示一個(gè)鍵/值的集合。9.7.5Hashtable元素的刪除C#中為Hashtable提供了元素刪除的方法Hashtable.Clear()。Hashtable.Clear方法的定義如下:publicvirtualvoidClear( )該方法是從調(diào)用Hashtable對(duì)象中刪除了所有元素。即Count屬性被設(shè)為0。9.7.6HashTable元素的查找C#中為HashTable的查找提供了以下方法:HashTable.Contains方法。HashTable.ContainsKey方法。HashTable.ContainsValue方法。9.7.7SortedList的簡(jiǎn)單介紹SortedList與HashTable一樣,都是封裝了一個(gè)鍵/值對(duì)的集合,但是集合中的內(nèi)容已按照鍵進(jìn)行了排序。所以SortedList除了可以通過鍵訪問外,還可以通過下標(biāo)來訪問。SortedList使用兩個(gè)數(shù)組來存儲(chǔ)列表的元素:一個(gè)用來存儲(chǔ)鍵,一個(gè)用來存儲(chǔ)值。鍵通常是字符串型的,并根據(jù)字母順序進(jìn)行排序。因?yàn)樾枰判?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 將優(yōu) 質(zhì) 服務(wù)進(jìn)行到底
- 2024年食品定制加工服務(wù)合同版B版
- 酒店商務(wù)會(huì)議參與者接待標(biāo)準(zhǔn)
- 農(nóng)民工薪酬支付的社會(huì)影響
- 養(yǎng)殖業(yè)保險(xiǎn)理賠協(xié)議書
- 城市供熱養(yǎng)護(hù)機(jī)械租賃
- 企業(yè)現(xiàn)金管理策略
- 智能農(nóng)業(yè)項(xiàng)目招投標(biāo)指南
- 企業(yè)文化傳播承諾書
- 體育訓(xùn)練捐贈(zèng)合作規(guī)則
- 初中數(shù)學(xué)項(xiàng)目化學(xué)習(xí)初探一以“池塘里有多少條魚”為例
- 視頻監(jiān)控維保項(xiàng)目投標(biāo)方案(技術(shù)標(biāo))
- 化工行業(yè)基礎(chǔ)知識(shí)培訓(xùn)
- 椎管內(nèi)腫瘤圍手術(shù)期護(hù)理課件
- 麻醉科主任述職報(bào)告
- PDCA降低護(hù)士針刺傷發(fā)生率
- 申請(qǐng)失業(yè)保險(xiǎn)金承諾書
- 工程竣工資料整理工程資料服務(wù)合同
- 智能化手術(shù)室介紹strykerisuite課件
- 國開(新)(本)《古代詩歌散文專題》歷屆5年期末考試題及答案
- Morse跌倒危險(xiǎn)因素評(píng)估量表
評(píng)論
0/150
提交評(píng)論