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<string, string> myDic =new Dictionary<string, string>(); 
     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<string, string> 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<string, string>.ValueCollection values = myDic.Values;
   
foreach (string s in values)
    {
        Console.WriteLine(
"value={0}", s);
    }

 

 

posted @ 2012-05-28 09:41  jsping68  阅读(1784)  评论(0编辑  收藏  举报