版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
——集合1.1系統(tǒng)技術(shù)棧介紹1非泛型集合泛型集合集合概述知識(shí)回顧類的繼承多態(tài)抽象類和接口Sealed關(guān)鍵字異常命名空間和程序集學(xué)習(xí)目標(biāo)通過本節(jié)學(xué)習(xí)可以:重點(diǎn)學(xué)習(xí)ArrayList集合重點(diǎn)學(xué)習(xí)Hashtable集合掌握List<T>泛型集合掌握Dictionary<TKey,TValue>泛型集合掌握自定義泛型了解集合概述01集合概述集合概述集合概述為了保存這些數(shù)目不確定的對(duì)象,C#中提供了一系列特殊的類,這些類可以存儲(chǔ)任意類型的對(duì)象,并且長(zhǎng)度可變,統(tǒng)稱為集合。C#中集合可分為泛型集合和非泛型集合,二者均間接實(shí)現(xiàn)了IEnumerable接口。泛型集合位于System.Collections.Generic命名空間,它只能存儲(chǔ)同一種類型的對(duì)象,其中最常用的是List<T>泛型集合和Dictionary<TKey,TValue>泛型集合。非泛型集合位于System.Collections命名空間,它可以存儲(chǔ)多種類型的對(duì)象,其中最常用的是ArrayList集合和Hashtable集合。集合概述C#中提供了豐富的集合類。為了便于初學(xué)者對(duì)集合進(jìn)行系統(tǒng)地學(xué)習(xí),接下來(lái)通過一個(gè)圖例來(lái)描述整個(gè)集合類的繼承體系,如下圖所示。上圖中列出了程序中常用的一些集合類。其中,虛線框里填寫的都是接口類型,而實(shí)線框里填寫的都是具體的實(shí)現(xiàn)類。集合概述02非泛型集合思考題ArrayList集合常用方法包括哪些?Arraylist集合ArrayList集合就像是一個(gè)收納盒,它可以容納不同類型的對(duì)象。例如,可以將int、string、object等類型的對(duì)象同時(shí)加入到ArrayList集合中。ArrayList集合提供了一系列方法,接下來(lái)通過下表來(lái)列舉ArrayList集合的常用方法。方法說明intAdd(objectvalue)將元素添加到ArrayList集合voidAddRange(ICollectionc)將集合或者數(shù)組添加到ArrayList集合voidClear()從ArrayList中移除所有元素boolContains(objectitem)判斷某元素是否在ArrayList中intIndexOf(objectvalue)查找指定元素,并返回該元素在ArrayList中第一個(gè)匹配項(xiàng)的索引voidInsert(intindex,objectvalue)將元素插入ArrayList的指定索引處intLastIndexOf(objectvalue)查找指定元素,并返回該元素在ArrayList中最后一個(gè)匹配項(xiàng)的索引voidRemove(objectobj)從ArrayList中移除指定元素的第一個(gè)匹配項(xiàng)voidRemoveAt(intindex);從ArrayList中移除指定索引處的元素voidReverse()將整個(gè)ArrayList中元素的順序反轉(zhuǎn)voidSort()對(duì)整個(gè)ArrayList中的元素進(jìn)行排序ArrayListArrayList集合ArrayList集合的常用方法可以對(duì)集合中的元素進(jìn)行添加、刪除、修改和查詢等操作,具體如下:添加元素調(diào)用ArrayList對(duì)象的Add()方法、AddRange()方法、Insert()方法來(lái)添加元素,具體示例代碼如下:ArrayListarr1=newArrayList();//創(chuàng)建ArrayList集合對(duì)象arr1//使用不同方法向集合添加多個(gè)元素
arr1.Add(134);arr1.AddRange(newArrayList(){"張三","李四"});arr1.Insert(2,'a');添加元素ArrayList集合需要注意的是,集合的長(zhǎng)度就是元素的個(gè)數(shù),集合的容量是隨集合長(zhǎng)度變化而變化的。如果集合的長(zhǎng)度在1~4之間,容量的值就是4。如果集合的實(shí)際長(zhǎng)度在5~8之間,那容量的值就變?yōu)?。以此類推,ArrayList的容量值總是以4為基本單位遞增或遞減。使用Insert()方法向集合中添加元素時(shí),允許插入元素的索引值比集合的最大索引值大1,如果元素的索引值超過集合的最大索引值且范圍在1以上,編譯時(shí)就會(huì)報(bào)異常。添加元素ArrayList集合2.刪除元素調(diào)用ArrayList的Remove()方法或RemoveAt()方法或Clear()方法刪除元素,具體示例代碼如下:ArrayListarr1=newArrayList();//將新建的集合對(duì)象添加到arr1集合的末尾
arr1.AddRange(newArrayList(){"張三","李四","王五"});arr1.Remove("張三");arr1.RemoveAt(0);arr1.Clear();刪除元素從集合中移除指定元素的第一個(gè)匹配項(xiàng)從集合中移除指定索引位置的元素刪除集合中所有的元素ArrayList集合3.修改元素通過集合中的索引修改ArrayList集合中的元素,具體示例代碼如下:
//創(chuàng)建ArrayList集合對(duì)象
ArrayListarr1=newArrayList(newArrayList(){"張三","李四","王五"});Console.WriteLine("修改前集合中的元素:");ErgoArr(arr1);arr1[0]=1;arr1[1]=2;arr1[2]=3;Console.WriteLine();Console.WriteLine("修改后集合中的元素:");ErgoArr(arr1);Console.ReadKey();修改元素通過集合的索引修改arr1中的元素,由原來(lái)的“張三”、“李四”、“王五”改成了1、2、3ArrayList集合4.查詢?cè)卣{(diào)用IndexOf()方法或LastIndexOf()方法查詢指定元素的索引,調(diào)用Contains()方法判斷集合中是否存在某個(gè)元素。具體示例代碼如下:
ArrayListarr1=newArrayList(newArrayList(){1,2,3,1});ErgoArr(arr1);
intindex=arr1.IndexOf(1);Console.WriteLine("集合中第一個(gè)1的索引值為:"+index);
intlastIndex=arr1.LastIndexOf(1);Console.WriteLine("集合中最后一個(gè)1的索引值為:"+lastIndex);boolresult=arr1.Contains(2);//判斷某元素是否在集合中Console.WriteLine("集合中是否包含元素2:"+result);arr1.Sort();//對(duì)集合中的元素按照默認(rèn)的順序進(jìn)行排序ErgoArr(arr1);
查詢?cè)夭檎抑付ㄔ?,并返回該元素在集合中第一個(gè)匹配項(xiàng)的索引查找指定元素,并返回該元素在集合最后一個(gè)匹配項(xiàng)的索引ArrayList集合多學(xué)一招:通過foreach循環(huán)遍歷ArrayList集合。具體語(yǔ)法格式如下:foreach(varitemincollection){
執(zhí)行語(yǔ)句;}
上述語(yǔ)法格式中,item變量用于存儲(chǔ)每次遍歷的元素,默認(rèn)情況下item為var類型,in為關(guān)鍵字,collection表示被遍歷的集合。需要注意的是,foreach循環(huán)只能對(duì)遍歷的元素進(jìn)行讀操作,而且只能單向遍歷,也就是一個(gè)元素在整個(gè)foreach循環(huán)中只能被訪問一次,因此在遍歷集合中的元素時(shí)可以優(yōu)先選擇foreach循環(huán),如果需要修改或多次訪問集合中某個(gè)元素時(shí),考慮使用for循環(huán)。多學(xué)一招思考題Hashtable集合常用方法包括哪些?hashtable集合C#中提供了一個(gè)Hashtable集合,該集合又被稱為鍵值對(duì)集合,所謂鍵就類似于字典中的目錄,值就類似于字典中的具體漢字信息,鍵與值是一一對(duì)應(yīng)的關(guān)系,通過唯一的鍵能找到對(duì)應(yīng)的值,因此Hashtable集合的這種特性大大提高了查詢?cè)氐男省=酉聛?lái)通過一張表來(lái)列舉Hashtable集合中的常用方法。方法說明voidAdd(objectkey,objectvalue)將帶有指定鍵和值的元素添加到Hashtable集合中voidClear()從Hashtable集合中移除所有元素boolContains(objectkey)判斷Hashtable集合中是否包含指定的鍵boolContainsValue(objectvalue)判斷Hashtable集合是否包含指定的值voidRemove(objectkey)從Hashtable集合中移除帶有指定鍵的元素Hashtable集合hashtable集合接下來(lái)通過一個(gè)案例來(lái)演示如何使用Hashtable集合中的常用方法,具體示例代碼如下:Hashtableht=newHashtable();//創(chuàng)建Hashtable集合對(duì)象htht.Add(1,"張三");ht.Add('A',"李四");ht.Add("BB","王五");ErgoHash(ht);ht.Remove("BB");
ErgoHash(ht);ht.Clear();
Console.WriteLine("集合ht中的元素個(gè)數(shù):"+ht.Count);Console.ReadKey();Hashtable集合調(diào)用Hashtable集合的Add()方法添加元素移除鍵為"BB"的元素移除Hashtable集合中所有元素hashtable集合在遍歷Hashtable集合時(shí),除了可以通過鍵來(lái)獲取對(duì)應(yīng)的值以外,還可以直接遍歷集合中的值或集合中的對(duì)象。接下來(lái)通過一個(gè)例子來(lái)演示這兩種遍歷方式,具體示例代碼如下:Hashtableht=newHashtable();//調(diào)用Hashtable的Add()方法來(lái)添加元素
ht.Add(1,"張三");ht.Add(2,"李四");ht.Add(3,"王五");//使用foreach語(yǔ)句來(lái)循環(huán)遍歷集合中的值
foreach(objectvalueinht.Values){Console.WriteLine("當(dāng)前遍歷到的值為:"+value);}Console.WriteLine();Hashtable集合hashtable集合//使用foreach語(yǔ)句來(lái)循環(huán)遍歷集合對(duì)象本身foreach(DictionaryEntrydicEninht){Console.Write(dicEn.Key+":"+dicEn.Value+"\n");}Console.ReadKey();運(yùn)行結(jié)果如下圖所示:Hashtable集合非泛型集合
publicclassstudent{publicintNumber{get;set;}publicstringName{get;set;}publicboolSex{get;set;}publicstudent(int_number,string_name,bool_sex){Number=_number;Name=_name;Sex=_sex;}publicoverridestringToString(){returnstring.Format("序號(hào):{0},姓名:{1},性別:{2}",Number.ToString(),Name,Sex?"男":"女");}}
ArrayListarrayStudents=newArrayList();
privatevoidButton_Click(objectsender,RoutedEventArgse){addData0();showExemple0();}
privatevoidaddData0(){arrayStudents.Add(newstudent(1,"小顆豆一",true));arrayStudents.Add(newstudent(3,"小顆豆二",false));arrayStudents.Add(newstudent(5,"小顆豆三",true));arrayStudents.Add(newstudent(2,"小顆豆四",false));arrayStudents.Add(newstudent(4,"小顆豆五",true));arrayStudents.Add(newstudent(6,"小顆豆六",false));arrayStudents.Add("這里冒一個(gè)字符串,需要轉(zhuǎn)換,如果這里是值類型還要進(jìn)行裝箱與拆箱,帶來(lái)額外的開銷!");}
privatevoidshowExemple0(){richTextBox1.AppendText("--------非泛型數(shù)組的操作(需要強(qiáng)制轉(zhuǎn)換)--------\r\n");foreach(variteminarrayStudents){if(itemisstudent)richTextBox1.AppendText(item.ToString()+"\r\n");elserichTextBox1.AppendText((string)item+"\r\n");}}非泛型集合類在取出值時(shí)需要進(jìn)行類型的轉(zhuǎn)換操作,如果加入值類型會(huì)引起裝箱和拆箱的操作,這會(huì)帶來(lái)巨大的性能額外開銷03泛型集合思考題List<T>泛型集合常用方法包括哪些?List<t>泛型集合List<student>listStudnets=newList<student>();
privatevoidButton_Click(objectsender,RoutedEventArgse){addData0();showExemple0();}
privatevoidaddData0(){listStudnets.Add(newstudent(1,"小顆豆一",true));listStudnets.Add(newstudent(3,"小顆豆二",false));listStudnets.Add(newstudent(5,"小顆豆三",true));listStudnets.Add(newstudent(2,"小顆豆四",false));listStudnets.Add(newstudent(4,"小顆豆五",true));listStudnets.Add(newstudent(6,"小顆豆六",false));}
privatevoidshowExemple0(){richTextBox1.AppendText("--------泛型數(shù)組的操作(不需要強(qiáng)制轉(zhuǎn)換)--------\r\n");foreach(variteminlistStudnets){richTextBox1.AppendText(item.ToString()+"\r\n");}}List<t>泛型集合C#提供了一個(gè)List<T>泛型集合,該集合不僅具備ArrayList集合的功能,而且還可以保證List<T>集合只能添加同類型元素,不會(huì)出現(xiàn)類型轉(zhuǎn)換的問題。接下來(lái)通過一個(gè)案例來(lái)演示泛型集合List<T>的使用,具體代碼如下:namespaceProgram08{classProgram{staticvoidMain(string[]args){List<string>list=newList<string>();//創(chuàng)建一個(gè)List<string>泛型集合list.Add("Apple");list.Add("Banana");list.Add("Orange");……}}}List<T>泛型集合向List<string>集合中添加三個(gè)string類型元素List<t>泛型集合namespaceProgram08{classProgram{staticvoidMain(string[]args){……
//使用foreach循環(huán)遍歷List<string>集合中的元素
foreach(stringiteminlist){Console.WriteLine(item+"");}Console.ReadKey();}}}List<T>泛型集合思考題Dictionary<Tkey,TValue>泛型集合常用方法包括哪些?Dictionary<tkey,tvalue>泛型集合通過前面的學(xué)習(xí)可知,Hashtable集合中的鍵與值在默認(rèn)情況下都是object類型,這使得用戶在取值時(shí)不可避免的遇到類型轉(zhuǎn)換的問題。為了解決這個(gè)問題,C#中提供了泛型集合Dictionary<Tkey,TValue>,該集合中的鍵與值都只能是一種類型。接下來(lái)通過具體的案例來(lái)演示泛型集合Dictionary<TKey,TValue>的用法,具體代碼如下所示。Dictionary<Tkey,TValue>泛型集合Dictionary<tkey,tvalue>泛型集合namespaceProgram09{classProgram{staticvoidMain(string[]args){Dictionary<int,string>dic=newDictionary<int,string>();dic.Add(1,"張三");dic.Add(2,"李四");dic.Add(3,"王五");//通過遍歷集合中的鍵獲取對(duì)應(yīng)的值foreach(intkeyindic.Keys){Console.WriteLine(key+":"+dic[key]);}……}}}Dictionary<Tkey,TValue>泛型集合向Dictionary<int,string>集合中添加三個(gè)元素Dictionary<tkey,tvalue>泛型集合namespaceProgram09{classProgram{staticvoidMain(string[]args){……Console.WriteLine();dic.Remove(2);//通過遍歷鍵值對(duì)的方式來(lái)獲取鍵與值foreach(KeyValuePair<int,string>kvindic){Console.WriteLine(kv.Key+":"+kv.Value);}Console.WriteLine();Console.ReadKey();}}}Dictionary<Tkey,TValue>泛型集合從集合中移除指定的鍵與值Dictionary<tkey,tvalue>泛型集合運(yùn)行結(jié)果如下圖所示:需要注意的是,集合Dictionary<TKey,TValue>中的鍵值對(duì)類型為KeyValuePair<int,string>,通過該類型的對(duì)象就可以獲取集合中的鍵和值。Dictionary<Tkey,TValue>泛型集合自定義泛型在程序開發(fā)中,如果泛型集合List<T>與Dictionary<TKey,TValue>都不能滿足實(shí)際需求,此時(shí)還可以自定義泛型。自定義泛型可以根據(jù)用戶的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)儀器儀表行業(yè)市場(chǎng)前瞻與投資戰(zhàn)略規(guī)劃分析報(bào)告
- 推拿選擇題復(fù)習(xí)測(cè)試附答案
- 2024年漢中職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)有答案解析
- 計(jì)算所軟件室TREC-11報(bào)告資料教程
- 2024至2030年中國(guó)蛇紋PU革數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)汽車控制索總成數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)彈臺(tái)式氣動(dòng)平面絲印機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024年中國(guó)馬賽克模擬屏屏體市場(chǎng)調(diào)查研究報(bào)告
- 2024年中國(guó)橡膠氣床墊市場(chǎng)調(diào)查研究報(bào)告
- 汽車智能座艙交互體驗(yàn)測(cè)試評(píng)價(jià)規(guī)程
- 上海中考考綱詞匯默寫每天50個(gè)(無(wú)答案)
- 熱工基礎(chǔ)課后答案超詳細(xì)版(張學(xué)學(xué))
- 十八項(xiàng)醫(yī)療核心制度培訓(xùn)課件
- 食品工藝學(xué)(魯東大學(xué))智慧樹知到期末考試答案2024年
- 工地食堂經(jīng)營(yíng)方案及計(jì)劃書
- 2024年汽車駕駛員高級(jí)證考試題庫(kù)及答案
- 正畸計(jì)劃書模板
- 空中交通管制基礎(chǔ)
- 供應(yīng)商競(jìng)價(jià)比價(jià)表
- 轉(zhuǎn)運(yùn)呼吸機(jī)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論