版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C# List<T>用法所屬命名空間:using System.Collections.Generic; List<T>類是 ArrayList 類的泛型等效類。 該類使用大小可按需動(dòng)態(tài)增加的數(shù)組實(shí)現(xiàn) IList<T> 泛型接口。 泛型的好處: 它為使用 c#語(yǔ)言編寫面向?qū)ο蟪绦蛟黾恿藰O大的效力和靈活性。不會(huì)強(qiáng)行對(duì)值類型進(jìn)行裝箱和拆箱,或?qū)σ妙愋瓦M(jìn)行向下強(qiáng)制類型轉(zhuǎn)換,所以性能得到提高。一、 List的基礎(chǔ)、常用方法:1、List<T> mList
2、= new List<T>(); a.T為列表中元素類型,現(xiàn)在以string類型作為例子如: List<string> mList = new List<string>();b.增加元素:List. Add(T item) 添加一個(gè)元素如:mList.Add("賴炎濱");c.插入元素:Insert(int index, T item); 在index位置添加一個(gè)元素如:mList
3、.Insert(1, "laiyanbin"); d.刪除元素: List. Remove(T item) 刪除一個(gè)值 如:mList.Remove("賴炎濱");
4、0; List. RemoveAt(int index); 刪除下標(biāo)為index的元素 如.:mList.RemoveAt(0);
5、0; List. RemoveRange(int index, int count); 從下標(biāo)index開始,刪除count個(gè)元素 如.:mList.RemoveRange(3, 2); /超出刪除的范圍會(huì)出錯(cuò)注:刪除某元素后,其后面的元素下標(biāo)自動(dòng)跟進(jìn)e.判斷是否存在List:List. Contains(T item)
6、0; 得到的結(jié)果是返回true或falsef.排序:List. Sort () /默認(rèn)是元素第一個(gè)字母按升序 給List里面元素順序反轉(zhuǎn): List. Reverse () /可以與List. Sort ()配合使用,達(dá)到想要的效果遍歷L
7、ist中元素: foreach (T element in mList) T的類型與mList聲明時(shí)一樣 Console.WriteLine(element); &
8、#160; g.List清空:List. Clear () 如:mList.Clear();h.獲得List中元素?cái)?shù)目: List. Count () 返回int值i.添加數(shù)組進(jìn)List:
9、string temArr = Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", " "Locu" ; mList.AddRange(temArr);2、List<T> testList =new List<T> (IEn
10、umerable<T> collection); 以一個(gè)集合作為參數(shù)創(chuàng)建List E.g.: string temArr = "Ha", "Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", "Locu" ;
11、160; List<string> testList = new List<string>(temArr);3、List與數(shù)組的相互轉(zhuǎn)換1.從string轉(zhuǎn)List<string>例如:string str=“1”,”2”;List <string> list=new List<string>(str);2.從List<string>轉(zhuǎn)string
12、 例如:List<string> list=new List<string>String str=list.ToArray();/ViewState"idlist"轉(zhuǎn)換成List<>List<int> idlist=(List<int>)ViewState"idlist"這段代碼演示了System.Collections.Generic的各容器類的用法,包括:Dictionary,KeyValuePair,SortedDictionary,SortedList,HashSet,Sort
13、edSet,List,Queue,Stack等類的用法C#view sourceprint?System.Collections.Generic.Dictionary<> /鍵/值對(duì)集合System.Collections.Generic.KeyValuePair<> /鍵/值對(duì)結(jié)構(gòu), 作為 Dictionary<> 的一個(gè)元素存在System.Collections.Generic.SortedDictionary&l
14、t;> /相當(dāng)于 Key 能自動(dòng)排序 Dictionary<>System.Collections.Generic.SortedList<> /和 SortedDictionary<> 功能相似, 但內(nèi)部算法不同, 其 Keys、Values 可通過(guò)索引訪問(wèn) System.Collections.Generic.HashSet<> /無(wú)序、無(wú)重復(fù)的元素集合System.Collections.Generic
15、.SortedSet<> /相當(dāng)于能自動(dòng)排序的 HashSet<>System.Collections.Generic.List<> /相當(dāng)于泛型的 ArrayList, 元素可重復(fù)、可排序、可插入、可索引訪問(wèn) System.Collections.Generic.Queue<> /隊(duì)列, 先進(jìn)先出System.Collections.Generic.Stack<> /堆棧, 后進(jìn)先出 System.Collecti
16、ons.Generic.LinkedList<> /雙向鏈表System.Collections.Generic.LinkedListNode<> /LinkedList<> 的節(jié)點(diǎn) System.Collections.Generic.SynchronizedCollection<> /線程安全的集合System.Collections.Generic.Synch
17、ronizedReadOnlyCollection<> /線程安全的只讀集合System.Collections.Generic.SynchronizedKeyedCollection<> /線程安全的鍵/值集合 Dictionary<>、KeyValuePair<>:protected void Button1_Click(object sender, EventArgs e) Dictionary<
18、;string, int> dict = new Dictionary<string, int>(); dict.Add("K1", 123); dict"K2" = 456; dict.Add("K3", 789); string str = "&quo
19、t; foreach (KeyValuePair<string, int> k in dict) str += string.Format("0-1; ", k.Key, k.Value); /K1-123; K2-456; K3-789;
20、0; TextBox1.Text = str; SortedDictionary<>:protected void Button1_Click(object sender, EventArgs e) SortedDictionary<string, int> dict = new SortedDictionary<string, int>(); dict.Add("K3
21、", 333); dict"K1" = 111; dict.Add("K2", 222); SortedDictionary<string, int>.KeyCollection ks = dict.Keys; SortedDictionary<string, int>.ValueCollection vs
22、= dict.Values; string s1, s2, s3; s1 = s2 = s3 = "" foreach (KeyValuePair<string, int> k in dict) s1 +
23、= string.Format("0-1; ", k.Key, k.Value); /K1-111; K2-222; K3-333; foreach (string s in ks) s2 += s + " " /K1; K2; K3;
24、160; foreach (int n in vs) s3 += n.ToString() + " " /111; 222; 333; TextBox1.Text = s1 + "n" + s2 + "n" + s3; SortedList<>:protected void Button1_Click(object
25、 sender, EventArgs e) SortedList<string, int> dict = new SortedList<string, int>(); dict.Add("K3", 333); dict"K1" = 111; dict.Add("K2", 222);
26、 string s1, s2, s3; s1 = s2 = s3 = "" foreach (KeyValuePair<string, int> k in dict) s1 += string.
27、Format("0-1; ", k.Key, k.Value); /K1-111; K2-222; K3-333; s2 = dict.Keys0; /K1 s3 = dict.Values0.ToString(); /111
28、160; TextBox1.Text = s1 + "n" + s2 + "n" + s3; HashSet<>、SortedSet<>:protected void Button1_Click(object sender, EventArgs e) HashSet<string> hs = new HashSet<string>
29、(); hs.Add("ccc"); hs.Add("bbb"); hs.Add("aaa"); SortedSet<string> ss = new SortedSet<string>(); ss.Add("ccc");
30、 ss.Add("bbb"); ss.Add("aaa"); string s1 = "", s2 = "" foreach (string s in hs) s1 += s + " " /ccc bbb aaa
31、 foreach (string s in ss) s2 += s + " " /aaa bbb ccc TextBox1.Text = s1 + "n" + s2; List<>:protected void Button1_Click(object sender, EventArgs e)
32、160; List<int> list = new List<int>(); list.Add(11); list.Add(22); list.Insert(0, 33); string s1, s2 = "", s3, s4 = ""
33、0; s1 = list0.ToString(); /33 for (int i = 0; i < list.Count; i+) s2 += listi.ToString() + " " /33 11 22 list.Sort(); s3 = list0.ToString(); /11 foreach&
34、#160;(int n in list) s4 += n.ToString() + " " /11 22 33 TextBox1.Text = s1 + "n" + s2 + "n" + s3 + "n" + s4; LinkedList<>、LinkedListNode<>:protected void
35、 Button1_Click(object sender, EventArgs e) LinkedList<string> list = new LinkedList<string>(); list.AddFirst("aaa"); list.AddLast("bbb"); list.AddFirst(&quo
36、t;ccc"); list.AddAfter(list.First, "ddd"); list.AddBefore(list.Last, "eee"); string s1 = "", s2 = "", s3 = "", s4 = "", s5 =&
37、#160;"" foreach (string s in list) s1 += s + " " /ccc ddd aaa eee bbb LinkedListNode<string> node = list.First; s2 = node.Value.ToString();
38、; /ccc node = node.Next; s3 = node.Value.ToString(); /ddd node = list.Last.Previous.Previous; s4 = node.Value.ToString();
39、; /aaa list.Remove("eee"); list.RemoveFirst(); list.RemoveLast(); node = list.First; while (node != null)&
40、#160; s5 += node.Value.ToString() + " " /ddd aaa node = node.Next; TextBox1.Text = s1 + "n" + s2 +
41、60;"n" + s3 + "n" + s4 + "n" + s5;版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。目錄(?)+從使用的頻率一個(gè)個(gè)來(lái)簡(jiǎn)單說(shuō)一下。Array/ArrayList/List/LinkedListArray數(shù)組在C#中最早出現(xiàn)的。在內(nèi)存中是連續(xù)存儲(chǔ)的,所以它的索引速度非???,而且賦值與修改元素也很簡(jiǎn)單。csharp view plain copy 1. string s=new string2;
42、 2. 3. /賦值 4. s0="a" 5. s1="b" 6. /修改 7. s1="a1" 但是數(shù)組存在一些不足的地方。在數(shù)組的兩個(gè)數(shù)據(jù)間插入數(shù)據(jù)是很麻煩的,而且在聲明數(shù)組的時(shí)候必須指定數(shù)組的長(zhǎng)度,數(shù)組的長(zhǎng)度過(guò)長(zhǎng),會(huì)造成內(nèi)存浪費(fèi),過(guò)段會(huì)造成數(shù)據(jù)溢出的錯(cuò)誤。如果在聲明數(shù)組時(shí)我們不清楚數(shù)組的長(zhǎng)度,就會(huì)變得很麻煩。針對(duì)數(shù)組
43、的這些缺點(diǎn),C#中最先提供了ArrayList對(duì)象來(lái)克服這些缺點(diǎn)。 底層數(shù)據(jù)結(jié)構(gòu)就是數(shù)組。ArrayListArrayList是命名空間System.Collections下的一部分,在使用該類時(shí)必須進(jìn)行引用,同時(shí)繼承了IList接口,提供了數(shù)據(jù)存儲(chǔ)和檢索。ArrayList對(duì)象的大小是按照其中存儲(chǔ)的數(shù)據(jù)來(lái)動(dòng)態(tài)擴(kuò)充與收縮的。所以,在聲明ArrayList對(duì)象時(shí)并不需要指定它的長(zhǎng)度。csharp view plain copy 1. ArrayList list1 = new ArrayList();
44、160; 2. 3. /新增數(shù)據(jù) 4. list1.Add("cde"); 5. list1.Add(5678); 6. 7. /修改數(shù)據(jù) 8. list2 = 34; 9. 10. /移除數(shù)據(jù) 11. list.RemoveAt(0);
45、12. 13. /插入數(shù)據(jù) 14. list.Insert(0, "qwe"); 從上面例子看,ArrayList好像是解決了數(shù)組中所有的缺點(diǎn),為什么又會(huì)有List?我們從上面的例子看,在List中,我們不僅插入了字符串cde,而且插入了數(shù)字5678。這樣在ArrayList中插入不同類型的數(shù)據(jù)是允許的。因?yàn)锳rrayList會(huì)把所有插入其中的數(shù)據(jù)當(dāng)作為object類型來(lái)處理,在我們使用ArrayList處理數(shù)據(jù)時(shí),很可能會(huì)報(bào)類型不匹配的錯(cuò)誤,也就是ArrayList不是類
46、型安全的。在存儲(chǔ)或檢索值類型時(shí)通常發(fā)生裝箱和取消裝箱操作,帶來(lái)很大的性能耗損。裝箱與拆箱的概念:簡(jiǎn)單的說(shuō):裝箱:就是將值類型的數(shù)據(jù)打包到引用類型的實(shí)例中比如將string類型的值abc賦給object對(duì)象objcsharp view plain copy 1. String i=”abc”; 2. object obj=(object)i; 拆箱:就是從引用數(shù)據(jù)中提取值類型比如將object對(duì)象obj的值賦給string類型的變量icsharp view plain&
47、#160;copy 1. object obj=”abc”; 2. string i=(string)obj; 裝箱與拆箱的過(guò)程是很損耗性能的。 底層數(shù)據(jù)結(jié)構(gòu)就是數(shù)組。類似于C+里面沒(méi)有泛型的Vector。泛型List因?yàn)锳rrayList存在不安全類型與裝箱拆箱的缺點(diǎn),所以出現(xiàn)了泛型的概念。List類是ArrayList類的泛型等效類,它的大部分用法都與ArrayList相似,因?yàn)長(zhǎng)ist類也繼承了IList接口。最關(guān)鍵的區(qū)別在于,在聲明List集合時(shí),我們同時(shí)需要為其聲明List集合
48、內(nèi)數(shù)據(jù)的對(duì)象類型。比如:csharp view plain copy 1. List<string> list = new List<string>(); 2. /新增數(shù)據(jù) 3. list.Add(“abc”); 4. /修改數(shù)據(jù) 5. list0 = “def”; 6. /移除數(shù)據(jù)
49、0;7. list.RemoveAt(0); 上例中,如果我們往List集合中插入int數(shù)組123,IDE就會(huì)報(bào)錯(cuò),且不能通過(guò)編譯。這樣就避免了前面講的類型安全問(wèn)題與裝箱拆箱的性能問(wèn)題了。底層數(shù)據(jù)結(jié)構(gòu)就是數(shù)組。類似于C+里面的Vector。LinkedList用雙鏈表實(shí)現(xiàn)的List,特點(diǎn)是插入刪除快,查找慢LinkedList<T> 提供 LinkedListNode<T> 類型的單獨(dú)節(jié)點(diǎn),因此插入和移除的運(yùn)算復(fù)雜度為 O(1)??梢砸瞥?jié)點(diǎn),然后在同一列表或其他列表中重新插入它們,這樣在堆中便不會(huì)分配額外的對(duì)象。由于該列表還維護(hù)內(nèi)部計(jì)
50、數(shù),因此獲取 Count 屬性的運(yùn)算復(fù)雜度為 O(1)。LinkedList<T> 對(duì)象中的每個(gè)節(jié)點(diǎn)都屬于 LinkedListNode<T> 類型。由于 LinkedList<T> 是雙向鏈表,因此每個(gè)節(jié)點(diǎn)向前指向 Next 節(jié)點(diǎn),向后指向 Previous 節(jié)點(diǎn)。csharp view plain copy 1. LinkedList<string> list = new LinkedList<string>(); 2. list.AddF
51、irst("Data Value 1"); 3. list.AddLast("Data Value 6"); 關(guān)于List和LonkedList的一個(gè)性能比較增加 刪除在List<T>中增加、刪除節(jié)點(diǎn)的速度,大體上快于使用LinkedList<T>時(shí)的相同操作。將 List<T>.Add方法和LinkedList<T>的Add*方法相比較,真正的性能差別不在于Add操作,而在LinkedList<T>在給GC(垃
52、圾回收機(jī)制)的壓力上。一個(gè)List<T>本質(zhì)上是將其數(shù)據(jù)保存在一個(gè)堆棧的數(shù)組上,而LinkedList<T>是將其所有節(jié)點(diǎn)保存在堆棧上(人家是一個(gè),我是一系列)。這就使得GC需要更多地管理堆棧上LinkedList<T>的節(jié)點(diǎn)對(duì)象。注意,List<T>.Insert*方法比在LinkedList<T>中使用Add*方法在任何地方添加一個(gè)節(jié)點(diǎn)可能要慢。然而,這個(gè)依賴于List<T>插入對(duì)象的位置。Insert方法必須使所有在插入點(diǎn)后面的元素往后移動(dòng)一位。如果新元素被插在List<T>最后或接近最后的位置,那么相對(duì)
53、于GC維護(hù)LinkedList<T>節(jié)點(diǎn)的總的開銷來(lái)說(shuō),其開銷是可以被忽略的。索引另一個(gè)List<T>性能優(yōu)于LinkedList<T>的地方是你在使用索引進(jìn)行訪問(wèn)的時(shí)候。在List<T>中,你可以使用索引值(indexer)直接定位到某個(gè)具體的元素位置。而在LinkedList<T>中,卻沒(méi)有這樣的奢侈品。在LinkedList<T>中,你必須通過(guò)Previous或Next屬性遍歷整個(gè)List,直到找到你想要的節(jié)點(diǎn)。HashSet/HashTable/Dictionary這三個(gè)容器的底層都是Hash表。HashSetMS
54、DN很簡(jiǎn)單的解釋:表示值的集。HashSet<T> 類提供了高性能的集運(yùn)算。一組是一個(gè)集合,不包含任何重復(fù)的元素,且的元素順序不分先后。用了hash table來(lái)儲(chǔ)存數(shù)據(jù),是為了用O(n)的space來(lái)?yè)Q取O(n)的時(shí)間,也就是查找元素的時(shí)間是O(1)。它包含一些集合的運(yùn)算HashSet<T> 提供了許多數(shù)學(xué)設(shè)置操作例如,組添加 (聯(lián)合),并設(shè)置減法。下表列出了所提供 HashSet<T> 操作和及其數(shù)學(xué)等效項(xiàng)。UnionWith - Union 或?qū)⑵湓O(shè)置的添加IntersectWith - 交集ExceptWith - Se
55、t 減法SymmetricExceptWith - 余集列出的集操作中,除了 HashSet<T> 類還提供了方法來(lái)確定 set 是否相等、 重疊的集,以及一組是否為子集或另一個(gè)集的超集。examplecsharp view plain copy 1. HashSet<int> evenNumbers = new HashSet<int>(); 2. HashSet<int> oddNumbers = n
56、ew HashSet<int>(); 3. 4. for (int i = 0; i < 5; i+) 5. 6. / Populate numbers with just even numbers. 7. &
57、#160; evenNumbers.Add(i * 2); 8. / Populate oddNumbers with just odd numbers. 9. oddNumbers.Add(i * 2) + 1); 10. 11. /
58、Create a new HashSet populated with even numbers. 12. HashSet<int> numbers = new HashSet<int>(evenNumbers); 13. numbers.UnionWith(oddNumbers); HashTable表示根據(jù)鍵的哈希代碼進(jìn)行組織的鍵/值對(duì)的集合。Hashtable是System.Co
59、llections命名空間提供的一個(gè)容器,用于處理和表現(xiàn)類似key/value的鍵值對(duì),其中key通??捎脕?lái)快速查找,同時(shí)key是區(qū)分大小寫;value用于存儲(chǔ)對(duì)應(yīng)于key的值。Hashtable中key/value鍵值對(duì)均為object類型,所以Hashtable可以支持任何類型的key/value鍵值對(duì).他內(nèi)部維護(hù)很多對(duì)Key-Value鍵值對(duì),其還有一個(gè)類似索引的值叫做散列值(HashCode),它是根據(jù)GetHashCode方法對(duì)Key通過(guò)一定算法獲取得到的,所有的查找操作定位操作都是基于散列值來(lái)實(shí)現(xiàn)找到對(duì)應(yīng)的Key和Value值的當(dāng)前HashTable中的被占用空間達(dá)到一個(gè)百分比的時(shí)候就將該空間自動(dòng)擴(kuò)容,在.net中這個(gè)百分比是72%,也叫.net中HashTable的填充因子為0.72。例如有一個(gè)HashTable
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度礦業(yè)權(quán)抵押擔(dān)保項(xiàng)目合同樣本3篇
- 2024經(jīng)七路施工項(xiàng)目廉潔保障合同版B版
- 二零二五年度廠房裝修安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 2025年度高校文印服務(wù)外包合同3篇
- 二零二五年度園林景觀裝修合同范本2篇
- 2024版影視融資中介協(xié)議模板版B版
- 簡(jiǎn)易勞務(wù)派遣合同范本
- 二零二五年度icp許可證辦理與互聯(lián)網(wǎng)企業(yè)合規(guī)性審查與法律支持合同3篇
- 二零二五版二手車按揭轉(zhuǎn)讓合同范本3篇
- 二零二五版建筑材料租賃與合同變更合同3篇
- 人教版(2025新版)七年級(jí)下冊(cè)英語(yǔ):寒假課內(nèi)預(yù)習(xí)重點(diǎn)知識(shí)默寫練習(xí)
- 【公開課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級(jí)下冊(cè)+
- 高職組全國(guó)職業(yè)院校技能大賽(嬰幼兒照護(hù)賽項(xiàng))備賽試題庫(kù)(含答案)
- 2024年公安部直屬事業(yè)單位招聘筆試參考題庫(kù)附帶答案詳解
- NB-T 47013.15-2021 承壓設(shè)備無(wú)損檢測(cè) 第15部分:相控陣超聲檢測(cè)
- SJG 05-2020 基坑支護(hù)技術(shù)標(biāo)準(zhǔn)-高清現(xiàn)行
- 汽車維修價(jià)格表
- 10KV供配電工程施工組織設(shè)計(jì)
- 終端攔截攻略
- 藥物外滲處理及預(yù)防【病房護(hù)士安全警示教育培訓(xùn)課件】--ppt課件
評(píng)論
0/150
提交評(píng)論