C#集合类:动态数组、队列、栈、哈希表、字典(转)

1、动态数组:ArrayList

主要方法:Add、AddRange、RemoveAt、Remove

2、队列:Queue

主要方法:Enqueue入队列、Dequeue出队列、Peek返回Queue开始处的对象但不删除

3、栈:Stack 后进先出

主要方法:Push方法入栈,Pop方法出栈、Peek弹出最后一项不删除

4、哈希表:HashTable 通过键值对更快捷的查找元素。键不能为空引用,但值可以

示例:Hashtable ht=new Hashtable(); //创建一个Hashtable实例 
        ht.Add("E","e");//添加key/value键值对   

        ht.Add("A","a"); 
        ht.Add(
"C","c"); 

    if(ht.Contains("E")) //判断哈希表是否包含特定键,其返回值为true或false 
         ht.Remove("E");

   ht.Clear();//清空

   //遍历哈希表:

   for(DictionaryEntry de in ht)

  {

  Console.write(de.Key);

  Console.write(de.Value);

  }  

     //对哈希表进行排序

   ArrayList list=new ArrayList(ht.Keys);

   list.Sort();

   foreach(string s in list)

  {

  Console.Write(ht[s]);  

  }

5、SortedList表示键/值对的集合:区别于HashTable之处是SortedList中的Key数组是排好序的

6、Dictionary泛型集合

命名空间System.Collections.Generic

非泛型集合对应的泛型集合类:

 

非泛型集合类     泛型集合类

 

ArrayList         List<T>

 

HashTable       Dictionary<T>

 

Queue             Queue<T>

 

Stack              Stack<T>

SortedList       SortedList<T>

示例:

  Dictionary<stringstring> myDic =new Dictionary<stringstring>(); 
     myDic.Add(
"aaa""111"); 
     myDic.Add(
"bbb""222"); 
     myDic.Add(
"ccc""333"); 
     myDic.Add(
"ddd""444"); 
     
//如果添加已经存在的键,add方法会抛出异常 
     try 
     { 
         myDic.Add(
"ddd","ddd"); 
     } 
     
catch (ArgumentException ex) 
     { 
         Console.WriteLine(
"此键已经存在:"+ ex.Message); 
     } 
     
//解决add()异常的方法是用ContainsKey()方法来判断键是否存在 
     if (!myDic.ContainsKey("ddd")) 
     { 
         myDic.Add(
"ddd""ddd"); 
     } 
     
else 
     { 
         Console.WriteLine(
"此键已经存在:"); 
     } 
   
     
//而使用索引器来负值时,如果建已经存在,就会修改已有的键的键值,而不会抛出异常 
     myDic ["ddd"]="ddd"
     myDic[
"eee"="555"
   
     
//使用索引器来取值时,如果键不存在就会引发异常 
     try 
     { 
        Console.WriteLine(
"不存在的键\"fff\"的键值为:"+ myDic["fff"]); 
     } 
     
catch (KeyNotFoundException ex) 
     { 
         Console.WriteLine(
"没有找到键引发异常:"+ ex.Message); 
     } 
     
//解决上面的异常的方法是使用ContarnsKey() 来判断时候存在键,如果经常要取健值得化最好用 TryGetValue方法来获取集合中的对应键值 
     string value =""
     
if (myDic.TryGetValue("fff"out value)) 
     { 
         Console.WriteLine(
"不存在的键\"fff\"的键值为:"+ value ); 
     } 
     
else 
     {    
         Console.WriteLine(
"没有找到对应键的键值"); 
     } 
   
     
//下面用foreach 来遍历键值对 
     
//泛型结构体用来存储健值对 
    foreach (KeyValuePair<stringstring> kvp in myDic) 
    { 
        Console.WriteLine(
"key={0},value={1}", kvp.Key, kvp.Value); 
    } 
    
//获取值得集合 
    foreach (string s in myDic.Values) 
    { 
        Console.WriteLine(
"value={0}", s); 
    } 
    
//获取值得另一种方式 
    Dictionary<stringstring>.ValueCollection values = myDic.Values; 
    
foreach (string s in values) 
    { 
        Console.WriteLine(
"value={0}", s); 
    } 

posted @ 2014-01-17 15:36  petercao  阅读(1043)  评论(0编辑  收藏  举报