Visual C# 2008程序設(shè)計第7章_第1頁
Visual C# 2008程序設(shè)計第7章_第2頁
Visual C# 2008程序設(shè)計第7章_第3頁
Visual C# 2008程序設(shè)計第7章_第4頁
Visual C# 2008程序設(shè)計第7章_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

VisualC#2008程序設(shè)計

第7章集合和泛型17十二月2023VisualC#2008程序設(shè)計第7章集合和泛型7.1集合與集合接口7.2泛型集合17十二月2023VisualC#2008程序設(shè)計7.1集合與集合接口集合就如同數(shù)組,用來存儲和管理一組特定類型的數(shù)據(jù)對象,除了基本的數(shù)據(jù)處理功能,集合直接提供了各種數(shù)據(jù)結(jié)構(gòu)及算法的實現(xiàn),如隊列、鏈表、排序等,可以讓你輕易地完成復雜的數(shù)據(jù)操作。在使用數(shù)組和集合時要先加入System.Collections命名空間,它提供了支持各種類型集合的接口及類。集合本身上也是一種類型,基本上可以將其作為用來存儲一組數(shù)據(jù)對象的容器,由C#面向?qū)ο蟮奶匦?,管理?shù)據(jù)對象的集合同樣被實現(xiàn)成為對象,而存儲在集合中的數(shù)據(jù)對象則被稱為集合元素。17十二月2023VisualC#2008程序設(shè)計7.1集合與集合接口C#ArrayList正是采用上述方法來動態(tài)改變數(shù)組大小的。C#ArrayList又被稱為動態(tài)數(shù)組,它的存儲空間可以被動態(tài)改變,同時還擁有添加、刪除元素的功能。ArrayList類派生自System.Collections,在使用時需要事先聲明并引用該命名空間。下面以一個例子來說明如何適用ArrayList類。在這個例子中演示了如何創(chuàng)建ArrayList,并輸出該動態(tài)數(shù)據(jù)組的值?!纠?-1】ArrayList用法舉例。//Ch07_01.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Collections;//自己添加的代碼namespaceCh07_01{classProgram{

17十二月2023VisualC#2008程序設(shè)計7.1集合與集合接口publicstaticvoidMain(){//創(chuàng)建并初始化一個ArrayList.ArrayListmyAL=newArrayList();myAL.Add("Hello");myAL.Add("World");myAL.Add("!");//顯示ArrayList個數(shù).Console.WriteLine("myAL");Console.WriteLine("Count:{0}",myAL.Count);Console.Write("Values:");PrintValues(myAL);}//顯示ArrayListpublicstaticvoidPrintValues(IEnumerablemyList){foreach(ObjectobjinmyList)Console.Write("{0}",obj);Console.WriteLine();}}}17十二月2023VisualC#2008程序設(shè)計7.1集合與集合接口在.NETFramework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似key/value的鍵值對,其中key通??捎脕砜焖俨檎?,同時key是區(qū)分大小寫;value用于存儲對應(yīng)于key的值。Hashtable中key/value鍵值對均為object類型,所以Hashtable可以支持任何類型的key/value鍵值對.Hashtable的主要操作:在哈希表中添加一個key/value鍵值對:HashtableObject.Add(key,value);在哈希表中去除某個key/value鍵值對:HashtableObject.Remove(key);通過鍵獲得值:HashtableObject[key]判斷哈希表是否包含特定鍵key:HashtableObject.Contains(key);17十二月2023VisualC#2008程序設(shè)計7.1集合與集合接口【例7-2】Hashtable用法舉例。//Ch07_02.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Collections;//自己添加的代碼namespaceCh07_02{classProgram{publicstaticvoidMain(){//創(chuàng)建新哈希表

HashtableopenWith=newHashtable();//為哈希表增加鍵值對,其中鍵不可重復,但值可以重復

openWith.Add("txt","notepad.exe");openWith.Add("bmp","paint.exe");openWith.Add("dib","paint.exe");openWith.Add("rtf","wordpad.exe");//如果增加的鍵與哈希表中已有的鍵重復,則拋出異常17十二月2023VisualC#2008程序設(shè)計7.1集合與集合接口try{openWith.Add("txt","winword.exe");}catch{Console.WriteLine("哈希表中已包含以\"txt\"為鍵的元素.");}//可以通過鍵獲得該鍵對應(yīng)的值

Console.WriteLine("鍵=\"rtf\",值={0}.",openWith["rtf"]);//修改鍵所對應(yīng)的值

openWith["rtf"]="winword.exe";Console.WriteLine("鍵=\"rtf\",值={0}.",openWith["rtf"]);//如果不存在該鍵,將為哈希表增加鍵值對,如果存在該鍵,則修改值。

openWith["doc"]="winword.exe";//首先查看是否包含某鍵,再增加

if(!openWith.ContainsKey("ht")){openWith.Add("ht","hypertrm.exe");Console.WriteLine("為鍵=\"ht\"增加值:{0}",openWith["ht"]);}//遍歷哈希表中所有鍵值對

Console.WriteLine();foreach(DictionaryEntrydeinopenWith){Console.WriteLine("鍵={0},值={1}",de.Key,de.Value);}17十二月2023VisualC#2008程序設(shè)計7.1集合與集合接口//獲得值的集合

ICollectionvalueColl=openWith.Values;//通過強制類型轉(zhuǎn)化獲得值集合中的對象

Console.WriteLine();foreach(stringsinvalueColl){Console.WriteLine("值={0}",s);}//獲得鍵集合

ICollectionkeyColl=openWith.Keys;//通過強制類型轉(zhuǎn)化獲得鍵集合中的對象

Console.WriteLine();foreach(stringsinkeyColl){Console.WriteLine("鍵={0}",s);}//利用Remove方法根據(jù)鍵刪除哈希表中的鍵值對

Console.WriteLine("\n刪除\"doc\"");openWith.Remove("doc");if(!openWith.ContainsKey("doc")){Console.WriteLine("鍵\"doc\"不存在.");}}}}17十二月2023VisualC#2008程序設(shè)計7.1集合與集合接口接口在具體集合類的實現(xiàn)中扮演著非常重要的角色,所有集合都直接或間接基于ICollection接口。ICollection接口:集合類的基接口,包含表示集合中元素個數(shù)、是否為線程安全等成員屬性,還包含一個將集合元素復制到數(shù)組的方法。IComparer接口:提供了用于比較兩個對象的方法,如果希望集合中的對象可以排序,這個方法有很重要的作用。IDictionary接口:允許對象將其數(shù)據(jù)表示為鍵-值對集合。IEnumerator、IEnumerable接口:支持foreach對集合的一種簡單迭代處理,迭代時只能讀取集合中的數(shù)據(jù)。IList接口:所有列表的基接口,控制能否在列表中修改、增加、刪除元素。在基于IList接口的集合中(如Array、ArrayList或List)或直接基于ICollection接口的集合中(如Queue、Stack或inkedList),每個元素都包含一個值。在基于IDictionary接口的集合中(如Hashtable和SortedList類、或者Dictionary和SortedList泛型類),每個元素都包含一個鍵和值。17十二月2023VisualC#2008程序設(shè)計7.2泛型集合7.1節(jié)中介紹了集合類。任何類型的對象要存儲在集合類中都必須強制轉(zhuǎn)化為Object類型,當從集合類中獲得元素時又要轉(zhuǎn)化成先前的類型。為了讓編譯提供更強的編譯時類型檢查,減少數(shù)據(jù)類型之間的顯示轉(zhuǎn)換,以及裝箱操作和運行時類型檢查,C#引入了泛型的概念。簡單的說,泛型可以讓類、結(jié)構(gòu)、接口、委托和方法按照自己存儲的操作的數(shù)據(jù)類型進行參數(shù)化。

ArrayListprimes=newArrayList();primes.Add(1);primes.Add(3);primes.Add("text");intpSum=(int)primes[0]+(int)primes[1];可以替換為如下代碼,其中使用了泛型版本的ArrayList:List<int>primes=newList<int>();primes.Add(1);primes.Add(3);//primes.Add("text");//無法通過編譯intpSum=primes[0]+primes[1];17十二月2023VisualC#2008程序設(shè)計7.2泛型集合List聲明中包含一個類型參數(shù),它告訴編譯器:對象可以包含什么類型的數(shù)據(jù)(在上面的例子中,類型為int),然后編譯器生成需要指定類型的代碼。對于開發(fā)人員來說,這就消除了運行時的強制類型轉(zhuǎn)換和類型驗證工作。從內(nèi)存利用和效率的角度來看,如果集合中存儲的是基本類型,那么還消除了裝箱(轉(zhuǎn)換為對象)的過程。17十二月2023VisualC#2008程序設(shè)計7.2泛型集合Stack又稱為堆?;驐?,它是一種重要的線性數(shù)據(jù)結(jié)構(gòu),棧只能在一端進行數(shù)據(jù)輸入和輸出操作,且遵循“后進先出”的原則,它有一個固定的棧底和浮動的棧頂。向棧中輸入數(shù)據(jù)的操作稱為“入棧”,被壓入的數(shù)據(jù)保存在棧頂,同時棧頂指針上浮一個;同樣從棧中輸出數(shù)據(jù)的操作稱為“出?!?,只有棧頂元素才能出棧,如果棧頂指針指向了棧底,說明當前的棧是空的。Stack類時用來實現(xiàn)棧的工具類,它能實現(xiàn)棧操作的主要方法,如下所示:(1)Push(objectobj)方法:將指定對象壓入棧的頂部;(2)Pop()方法:移出并返回位于Stack頂部的對象;(3)Peek()方法:返回位于棧頂?shù)膶ο?,但不將此對象移出?7十二月2023VisualC#2008程序設(shè)計7.2泛型集合【例7-3】Stack用法舉例。//Ch07_03.csusingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceCh07_03{classProgram{publicstaticvoidMain(){string[]name={"武漢","軟件","職業(yè)","學院"};Stack<string>stk=newStack<string>();//壓棧

for(inti=0;i<name.Length;i++)stk.Push(name[i]);//stk.Push(1.5);//無法通過編譯

//出棧

while(stk.Count>0)Console.WriteLine(stk.Pop());}}}17十二月2023VisualC#2008程序設(shè)計7.2泛型集合Queue類(隊列)也是非常重要的線性數(shù)據(jù)結(jié)構(gòu),它在按接收順序存儲消息方面非常有用。與棧不同,隊列在一端輸入數(shù)據(jù)(也叫入隊),另一端輸出數(shù)據(jù)(也叫出隊)。隊列中數(shù)據(jù)的插入和刪除都只能在隊列的頭尾處進行,而不能直接在任意位置插入或刪除數(shù)據(jù),它的操作遵循“先進先出”原則。每個隊列都有一個容量,如果存儲的元素數(shù)達到了它的容量,這個容量還會自動增加以滿足需要,隊列有一個增長系數(shù),它表示了當隊列滿了容量的增加值,用戶也可以直接在Queue類的構(gòu)造函數(shù)中設(shè)定

溫馨提示

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

評論

0/150

提交評論