C#教學(xué)課件:第5章 集合_第1頁
C#教學(xué)課件:第5章 集合_第2頁
C#教學(xué)課件:第5章 集合_第3頁
C#教學(xué)課件:第5章 集合_第4頁
C#教學(xué)課件:第5章 集合_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第5章 集合1內(nèi)容簡介 上一章我們主要學(xué)習(xí)了數(shù)組的相關(guān)知識,包括一維數(shù)組、二維數(shù)組和多維數(shù)組等,它們都是靜態(tài)數(shù)組。靜態(tài)數(shù)組有一個最大的弊端,就是一旦數(shù)組元素完成初始化工作,要在程序中動態(tài)添加和刪除某個元素是非常困難的。為了解決這個問題。.NET引入了各種各樣的集合對象,如Hashtable、Stack以及上一章的ArrayList集合類等。 本章我們將詳細介紹集合的相關(guān)知識,包括集合概念、C#中的內(nèi)置集合以及如何自定義集合等內(nèi)容。2本章學(xué)習(xí)要點 了解集合的概念和ICollection接口的成員 掌握System.Collections命名空間下常用的集合類 掌握ArrayList集合中添加項、

2、刪除項以及訪問項等常用的操作方法 掌握Hashtable集合的概念以及操作方法 熟悉Stack集合的概念以及操作方法 了解BitArray集合的概念以及操作方法 掌握SortedList集合的概念以及操作方法 掌握不同集合中遍歷所有元素的方法35.1 集合概述 集合好比容器,將一系列相似的組合一起,就如同數(shù)組,用來存儲和管理一組特定類型的數(shù)據(jù)對象。除了基本的數(shù)據(jù)處理功能,還直接提供了各種數(shù)據(jù)結(jié)構(gòu)及算法的實現(xiàn),如隊列、哈希表、排序等,可以讓用戶輕易地完成復(fù)雜的數(shù)據(jù)操作。 在C#中所有集合都可以使用GetEnumerator()方法返回一個枚舉數(shù),遍歷集合中的內(nèi)容。 C#提供的集合都在命名空間Sy

3、stem.Collections中。45.1 集合概述集合說明ArrayList可以動態(tài)增加數(shù)組和刪除數(shù)組等Hashtable哈希表,表示鍵/值對的集合,這些鍵/值對根據(jù)鍵的哈希代碼進行組織Stack堆棧,表示對象的后進先出集合Queue隊列,表示對象的先進先出集合BitArray布爾集合類,管理位值的壓縮數(shù)組,true表示位是打開的(1),false表示位是關(guān)閉的(0)SortedList排序集合類,表示鍵/值對的集合,這些鍵值對按鍵排序并且可以按鍵和索引訪問.45.2 C#內(nèi)置集合.1 這一節(jié)我們主要學(xué)習(xí)C#中6種內(nèi)置集合的相關(guān)知識。ArrayList集合

4、Hashtable集合Stack集合Queue集合5.2.5BitArray集合5.2.6SortedList集合65.2.1 ArrayList集合 ArrayList集合即動態(tài)數(shù)組,主要針對數(shù)組中的元素進行處理,上一章已經(jīng)介紹過它的用法,本節(jié)不再重復(fù)。75.2.2 Hashtable集合 Hashtable是一種鍵/值對集合,它的數(shù)據(jù)是通過鍵和值來組織的。還可以被稱為散列表或哈希表。 在Hashtable集合中每一個元素都是一個鍵/值對,而且是一一對應(yīng)的關(guān)系, Hashtable集合中不能包含重復(fù)的key值,通過鍵(key)就可以找到相應(yīng)的值(value)。如果使用Add()方法添加一個已

5、經(jīng)存在的key值,程序就會拋出異常。 下表列出了Hashtable常用的方法。方法說明Add()將指定的鍵和值添加到集合。方法有兩個參數(shù):第一個參數(shù)表示鍵,第二個參數(shù)表示值Remove()根據(jù)鍵(key)刪除指定的元素Clear()清除集合中的所有元素ContainsKey()判斷集合中是否包含特定的key值ContainsValue()判斷集合中是否包含特定的Value值8屬性: Count獲取包含在 Hashtable 中的鍵/值對的數(shù)目。9使用Hashtable時必須引用 System.Collections命名空間。根據(jù)key鍵訪問value值: hashTableNamekey不能通

6、過索引值訪問其中元素,所以不能通過for語句進行遍歷。單個訪問或遍歷時,必須注意數(shù)據(jù)類型及其轉(zhuǎn)換。 using System.Collections; public static void Main() Hashtable hs = new Hashtable(); hs.Add(001, 周杰倫); hs.Add(002, 汪峰); hs.Add( 003“ , 林俊杰); Console.WriteLine(hs02); Console.WriteLine(hs003); Console.WriteLine(hs003); hs.Remove(003); Console.WriteLine

7、(Revome(003)以后:+hs003); hs.Remove(003); Console.WriteLine(Revome(003)以后: + hs003); Console.ReadLine(); 10可采用foreach語句,遍歷哈希表元素。 例: foreach ( int i in table1.keys)foreach ( string s in table1.values)foreach (DictionaryEntry item in table1) public static void Main() Hashtable hstl = new Hashtable(); hs

8、tl.Add(103, 周杰倫); hstl.Add(102, 汪峰); hstl.Add(101, 林俊杰); foreach (string s in hstl.Values) Console.WriteLine(s); foreach (int i in hstl.Keys) Console.WriteLine(0,1, i, hstli); Console.ReadLine(); 11 public static void Main() Hashtable hstl = new Hashtable(); hstl.Add(103, 周杰倫); hstl.Add(102, 汪峰); hs

9、tl.Add(101, 林俊杰); foreach (DictionaryEntry dr in hstl) /通過DictionaryEntry遍歷hashtable int key = (int) dr.Key; / 必須將object類型顯式轉(zhuǎn)換為int string value = (string) dr.Value; / / 必須顯式轉(zhuǎn)換 Console.WriteLine(編號為+key+ 的號碼為:+value); if (hstl.ContainsKey(103) Console.WriteLine(存在key為103的記錄); if (hstl.ContainsValue(林

10、俊杰) Console.WriteLine(存在Value為林俊杰的記錄); Console.ReadLine(); 5.2.3 Stack集合 Stack(堆棧)集合用于實現(xiàn)一個后進先出(Last In First Out,LIFO)的機制,最后進去的元素最先離開集合,第一個元素最后離開集合。 Count屬性是Stack集合中最常用的屬性,用來存儲集合的實際元素數(shù)(容量)。 向 Stack 添加元素時,將通過重新分配來根據(jù)需要自動增大容量。方法說明Push()將指定元素插入到Stack集合的頂部Pop()返回并刪除Stack集合頂部的元素Peek()返回Stack集合頂部的元素,但不刪除該元

11、素Clear()從 Stack 中移除所有對象Contains(object obj)確定某元素是否在 Stack 中使用Push、Pop、for、foreach訪問堆棧using System.Collections; public static void Main() Stack myStack = new Stack(); myStack.Push(一樓); myStack.Push(二樓); myStack.Push(三樓); myStack.Push(四樓); foreach (Object obj in myStack) Console.WriteLine(obj); Consol

12、e.WriteLine(=); string s = (string)myStack.Pop(); myStack.Push(“hello); for (int i = 0; i myStack.Count ; i+ ) s = (string)myStack.Pop(); Console.WriteLine(s); Console.ReadLine(); 13四樓三樓二樓一樓結(jié)果?14 public static void Main() Stack myStack = new Stack(); myStack.Push(一樓); myStack.Push(二樓); myStack.Push(

13、三樓); IEnumerator items = myStack.GetEnumerator(); for (int i = 1; i = myStack.Count;i+ ) items.MoveNext(); Console.WriteLine(items.Current); Console.ReadLine(); 利用IEnumerator訪問堆棧中的元素IEnumerator 枚舉數(shù)可用于讀取各種集合中的數(shù)據(jù)。最初枚舉數(shù)被定位于集合中第一個元素的前面,在創(chuàng)建枚舉數(shù)之后或在調(diào)用 Reset 方法之后,必須先調(diào)用 MoveNext 方法使枚舉數(shù)前進到集合的第一個元素,然后才能讀取 Curr

14、ent 的值;否則 Current 未定義。15 public static void Main() ArrayList arr = new ArrayList(); for (int i = 0; i 8; i+) arr.Add(i*10); IEnumerator items = arr.GetEnumerator(3, 3); /從索引3號開始取3個元素 while (items.MoveNext() Console.WriteLine(items.Current); Console.ReadLine(); GetEnumerator() 可以訪問各種集合GetEnumerator()

15、 / 靜態(tài)數(shù)組、堆棧、隊列、位數(shù)組等GetEnumerator(int startindex , int count) / 動態(tài)數(shù)組ArrayListMoveNext() 返回bool型,下移是否成功5.2.4 Queue集合 Queue(隊列)集合用于實現(xiàn)一個先進先出(First In First Out,LIFO)的機制。例如,排隊買票,站在隊前的人先拿到票離開;游玩時坐摩天輪,也是排在隊列前的人先坐。Queue集合常用的方法:方法說明Enqueue()將對象添加到Queue集合的結(jié)尾處Dequeue()移除并返回位于Queue集合開始處的對象Peek()返回位于Queue集合開始處的對象

16、但不將其移除Clear()從 Queue 中移除所有對象。16屬性: Count,獲取 Queue 中包含的元素數(shù)。17public static void Main()Queue myQ = new Queue(); myQ.Enqueue(The); myQ.Enqueue(quick); myQ.Enqueue(brown); myQ.Enqueue(fox); Console.WriteLine(Count: 0, myQ.Count);Console.WriteLine(myQ.Peek();Console.WriteLine(myQ.Dequeue();Console.WriteL

17、ine(=);foreach (object obj in myQ) Console.WriteLine( Convert.ToString(obj);Console.ReadLine(); using System.Collections;IEnumerator items = myQ.GetEnumerator();while (items.MoveNext() Console.WriteLine(items.Current);5.2.5 BitArray集合 BitArray是布爾集合類,又可以被稱為位數(shù)組。它的值只有true和false兩個值,其中true表示1,false表示0。方法

18、說明And(BitArray)當前BitArray中元素和指定BitArray中相應(yīng)元素按位“與”O(jiān)r()當前BitArray中元素和指定BitArray中相應(yīng)元素按位“或”Xor()當前BitArray中元素和指定BitArray中元素按位“異或”Not()反轉(zhuǎn)當前BitArray中的所有位值Get(int idx)獲取BitArray中特定位置處的位的值Set(int idx, bool value)將BitArray中特定位置處的位設(shè)置為指定值SetAll ( bool value )將BitArray中的所有位設(shè)置為指定值常用屬性:Length ,表示該對象包含的元素個數(shù)。 18pub

19、lic static void Main() / using System.Collections; BitArray bitList1 = new BitArray(10); / 10是長度 BitArray bitList2 = new BitArray(10); Random rand= new Random(); for (int i = 0; i bitList1.Length;i+ ) bitList1.Set(i, rand.Next(1, 100) % 2 = 0); /1到100間的隨機數(shù) bitList2.Set(i, rand.Next(1, 100) % 2 = 0);

20、 ShowIt(bitList1); ShowIt(bitList2); bitList1 = bitList1.And(bitList2); ShowIt(bitList1); Console.WriteLine(bitList1.Get(3) ); bitList1.SetAll(true); ShowIt(bitList1); Console.ReadLine();protected static void ShowIt(BitArray bitlist) IEnumerator items = bitlist.GetEnumerator(); while (items.MoveNext

21、() Console.Write( items.Current +t); Console.WriteLine();195.2.6 SortedList集合 SortedList集合也是表示鍵/值的集合,它兼顧了ArrayList和Hashtable優(yōu)點,既可以按照索引訪問元素,也可以通過鍵名訪問元素。 鍵不允許重復(fù),不能為null,但值可以。 元素是經(jīng)過排序存放的,所以又被稱作排序列表。每個元素都是一個可作為DictionaryEntry對象進行訪問的鍵/值對。20indexKeyvalue0k1v11k2v22k3v33k4v44k5v5順序存放 SortedList常用方法:方法說明Add(key,value)將指定的鍵和值的元素添加到集合中IndexOfKey()返回集合中指定鍵的索引IndexOfValue()返回指定的值在集合中第一個匹配項的索引SetByIndex()替換集合中指定索引處的值GetByIndex()獲取集合中指定索引處的值GetKey()獲取集合中指定索引處的鍵GetKeyLi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論