1、C#的 6 种常用集合类大比拼(1)【引自清清月儿的博客】一、先来说说数组的不足(也可以说集合与数组的区别)1.数组是固定大小的,不能伸缩。虽然 System.Array.Resize 这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的。2.数组要声明元素的类型,集合类的元素类型却是 object。3.数组可读可写不能声明只读数组。集合类可以提供 ReadOnly 方法以只读方式使用集合。4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。很多时候集合有
2、定制的下标类型,对于队列和栈根本就不支持下标访问! 二、下面讲述 6 种常用集合1.ArrayList 类using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace ConsoleApplication1.class Program.static void Main(string args).ArrayList al = new ArrayList();al.Add(100);/单个添加foreach (int number in new int6 . 9,
3、 3, 7, 2, 4, 8 ).al.Add(number);/集体添加方法一int number2 = new int2 . 11,12 ;al.AddRange(number2);/集体添加方法二al.Remove(3);/移除值为 3 的al.RemoveAt(3);/移除第 3 个ArrayList al2 = new ArrayList(al.GetRange(1, 3);/新 ArrayList 只取旧 ArrayList 一部份Console.WriteLine(“遍历方法一:“);foreach (int i in al)/不要强制转换.Console.WriteLine(i
4、);/遍历方法一Console.WriteLine(“遍历方法二:“);for (int i = 0; i != al2.Count; i+)/数组是length.int number = (int)al2i;/一定要强制转换Console.WriteLine(number);/遍历方法二图 12.Stack 类栈,后进先出。push 方法入栈,pop 方法出栈。 using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace ConsoleApplicatio
5、n1.class Program.static void Main(string args).Stack sk = new Stack();Stack sk2 = new Stack();foreach (int i in new int4 . 1, 2, 3, 4 ).sk.Push(i);/填充sk2.Push(i);foreach (int i in sk).Console.WriteLine(i);/遍历sk.Pop();Console.WriteLine(“Pop“);foreach (int i in sk).Console.WriteLine(i);sk2.Peek();/弹出最
6、后一项不删除 Console.WriteLine(“Peek“);foreach (int i in sk2).Console.WriteLine(i);while (sk2.Count != 0).int i = (int)sk2.Pop();/清空sk2.Pop();/清空Console.WriteLine(“清空“);foreach (int i in sk2).Console.WriteLine(i);图 23.Queue 类队列,先进先出。enqueue 方法入队列,dequeue 方法出队列。 using System;using System.Collections.Generi
7、c;using System.Text;using System.Collections;namespace ConsoleApplication1.class Program.static void Main(string args).Queue qu = new Queue();Queue qu2 = new Queue();foreach (int i in new int4 . 1, 2, 3, 4 ).qu.Enqueue(i);/填充qu2.Enqueue(i);foreach (int i in qu).Console.WriteLine(i);/遍历qu.Dequeue();C
8、onsole.WriteLine(“Dequeue“);foreach (int i in qu).Console.WriteLine(i);qu2.Peek();/弹出最后一项不删除Console.WriteLine(“Peek“);foreach (int i in qu2).Console.WriteLine(i);while (qu2.Count != 0).int i = (int)qu2.Dequeue();/清空qu2.Dequeue();/清空Console.WriteLine(“清空“);foreach (int i in qu2).Console.WriteLine(i);
9、图 34.Hashtable 类哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。GetHashCode()方法返回一个int 型数据,使用这个键的值生成该 int 型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。 using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace ConsoleApplication1.class Progr
10、am.public static void Main()./ Creates and initializes a new Hashtable.Hashtable myHT = new Hashtable();myHT.Add(“one“, “The“);myHT.Add(“two“, “quick“);myHT.Add(“three“, “brown“);myHT.Add(“four“, “fox“);/ Displays the Hashtable.Console.WriteLine(“The Hashtable contains the following:“);PrintKeysAndV
11、alues(myHT);public static void PrintKeysAndValues(Hashtable myHT).foreach (string s in myHT.Keys)Console.WriteLine(s);Console.WriteLine(“ -KEY- -VALUE-“);foreach (DictionaryEntry de in myHT)Console.WriteLine(“ 0: 1“, de.Key, de.Value);Console.WriteLine();图 45.SortedList 类与哈希表类似,区别在于 SortedList 中的 Ke
12、y 数组排好序的。 using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace ConsoleApplication1.class Program.public static void Main().SortedList sl = new SortedList();sl“c“ = 41;sl“a“ = 42;sl“d“ = 11;sl“b“ = 13;foreach (DictionaryEntry element in sl).string s = (st
13、ring)element.Key;int i = (int)element.Value;Console.WriteLine(“0,1“,s,i);图 56.NameValueCollection 类官方给 NameValueCollection 定义为特殊集合一类,在 System.Collections.Specialized下。System.Collections.Specialized 下还有 HybridDicionary 类,建议少于 10 个元素用HybridDicionary,当元素增加会自动转为 HashTable。System.Collections.Specialized
14、下还有 HybridDicionary 类,字符串集合。System.Collections.Specialized 下还有其他类大家可以各取所需!言归正转主要说 NameValueCollection,HashTable 和 NameValueCollection 很类似但是他们还是有区别的,HashTable 的 KEY 是唯一性,而 NameValueCollection 则不唯一! using System;using System.Collections.Generic;using System.Collections;using System.Collections.Special
15、ized;namespace ConsoleApplication1.class Program.static void Main(string args).System.Collections.Hashtable ht = new System.Collections.Hashtable();ht.Add(“DdpMDisplaySeq“.Trim(), “Display Sequence“.Trim();ht.Add(“DdpMNameChi“.Trim(), “Name (Chinese)“.Trim();ht.Add(“DdpMNameEng“.Trim(), “Name (Engli
16、sh)“.Trim();ht.Add(“Comment“.Trim(), “Comment“.Trim();ht.Add(“DdpMMarketCode“.Trim(), “Market Code“.Trim();foreach (object key in ht.Keys).Console.WriteLine(“0/12,3“, key, htkey, key.GetHashCode(), htkey.GetHashCode();Console.WriteLine(“ “);NameValueCollection myCol = new NameValueCollection();myCol
17、.Add(“DdpMDisplaySeq“.Trim(), “Display Sequence“.Trim();myCol.Add(“DdpMNameChi“.Trim(), “Name (Chinese)“.Trim();myCol.Add(“DdpMNameChi“.Trim(), “Name (English)“.Trim();myCol.Add(“Comment“.Trim(), “Comment“.Trim();myCol.Add(“DdpMMarketCode“.Trim(), “Market Code“.Trim();foreach (string key in myCol.Ke
18、ys).Console.WriteLine(“0/1 2,3“, key, myColkey, key.GetHashCode(), myColkey.GetHashCode();图 6C#泛型集合揽胜为什么要用泛型集合?在 C# 2.0 之前,主要可以通过两种方式实现集合:a.使用 ArrayList直接将对象放入 ArrayList,操作直观,但由于集合中的项是 Object 类型,因此每次使用都必须进行繁琐的类型转换。b.使用自定义集合类比较常见的做法是从 CollectionBase 抽象类继承一个自定义类,通过对 IList对象进行封装实现强类型集合。这种方式要求为每种集合类型写一个
19、相应的自定义类,工作量较大。泛型集合的出现较好的解决了上述问题,只需一行代码便能创建指定类型的集合。什么是泛型?泛型是 C# 2.0 中的新增元素 (C+中称为模板),主要用于解决一系列类似的问题。这种机制允许将类名作为参数传递给泛型类型,并生成相应的对象。将泛型(包括类、接口、方法、委托等)看作模板可能更好理解,模板中的变体部分将被作为参数传进来的类名称所代替,从而得到一个新的类型定义。泛型是一个比较大的话题,在此不作详细解析,有兴趣者可以查阅相关资料。怎样创建泛型集合?主要利用 System.Collections.Generic 命名空间下面的 List泛型类创建集合,语法如下:List ListOfT = new List();其中的“T“就是所要使用的类型,既可以是简单类型,如 string、int,也可以是用户自定义类型。下面看一个具体例子。定义 Person 类如下:class Personprivate string _name; /姓名private int _age; /年龄/创建 Person 对象
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。