首页 > 代码库 > Hashtable和Dictionary<T,K>的使用

Hashtable和Dictionary<T,K>的使用

由于Hashtable内部自带有排序(根据Key的HashCode来进行的),因此有时在使用Hashtable时就会造成数据顺序不可控的情况,有两种办法可以解决,

测试代码:

 Dictionary<string,string> ht=new Dictionary<string, string>();
技术分享        ht.Add("http://www.sina.com.cn","");
技术分享        ht.Add("http://www.bjut.edu.cn","");
技术分享        ht.Add("http://lib.bjut.edu.cn", "");
技术分享        ht.Add("http://news.bjut.edu.cn", "");
技术分享        ht.Add("http://sse.bjut.edu.cn", "");
技术分享        ht.Add("http://lexus.cnblogs.com", "");
技术分享        ht.Add("http://www.sina.com.cn/sport", "");
技术分享        ht.Add("http://www.sina.com.cn/ent", "");
技术分享
技术分享        foreach(var kvp in ht)
技术分享            Console.WriteLine(kvp.Key);
技术分享        Console.WriteLine("============================================");
技术分享        Hashtable ht2=new Hashtable();
技术分享        ht2.Add("http://www.sina.com.cn", "");
技术分享        ht2.Add("http://www.bjut.edu.cn", "");
技术分享        ht2.Add("http://lib.bjut.edu.cn", "");
技术分享        ht2.Add("http://news.bjut.edu.cn", "");
技术分享        ht2.Add("http://sse.bjut.edu.cn", "");
技术分享        ht2.Add("http://lexus.cnblogs.com", "");
技术分享        ht2.Add("http://www.sina.com.cn/sport", "");
技术分享        ht2.Add("http://www.sina.com.cn/ent", "");
技术分享        foreach(DictionaryEntry i in ht2)
技术分享            Console.WriteLine(i.Key);

 

第一种是继承Hashtable,自己创建一个新的类,用一个ArrayList对象保存keys;

代码:(转)

using System;
技术分享using System.Collections;
技术分享
技术分享namespace NoSortHashtable
技术分享{
技术分享    /// <summary>
技术分享    /// Summary description for NoSortedHashtable.
技术分享    /// </summary>
技术分享    public class NoSortHashtable : Hashtable
技术分享    {
技术分享        private ArrayList keys = new ArrayList();
技术分享
技术分享        public NoSortHashtable()
技术分享        {
技术分享        }
技术分享        
技术分享
技术分享        public override void Add(object key, object value)
技术分享        {
技术分享            base.Add (key, value);
技术分享            keys.Add (key);
技术分享        }
技术分享
技术分享        public override ICollection Keys
技术分享        {
技术分享            get
技术分享            {
技术分享                return keys;
技术分享            }
技术分享        }
技术分享
技术分享        public override void Clear()
技术分享        {
技术分享            base.Clear ();
技术分享            keys.Clear ();
技术分享        }
技术分享
技术分享        public override void Remove(object key)
技术分享        {
技术分享            base.Remove (key);
技术分享            keys.Remove    (key);
技术分享        }
技术分享        public override IDictionaryEnumerator GetEnumerator()
技术分享        {
技术分享            return base.GetEnumerator ();
技术分享        }
技术分享
技术分享    }
技术分享}

测试:

            hashTable = new NoSortHashtable();

            hashTable.Add("hunan","changsha");
            hashTable.Add("beijing","beijing");
            hashTable.Add("anhui","hefei");
            hashTable.Add("sichuan","chengdu");
            foreach(string str in hashTable.Keys)
            {
                Console.WriteLine(str + " : " + hashTable[str]);
            }

----------------------------------------------------------------------

第二种办法是采用泛型的Dictionary<T,K>对象,该对象按照插入的顺序输出;

 

         Dictionary<string,string> ht=new Dictionary<string, string>();
技术分享        ht.Add("http://www.sina.com.cn","");
技术分享        ht.Add("http://www.bjut.edu.cn","");
技术分享        ht.Add("http://lib.bjut.edu.cn", "");
技术分享        ht.Add("http://news.bjut.edu.cn", "");
技术分享        ht.Add("http://sse.bjut.edu.cn", "");
技术分享        ht.Add("http://lexus.cnblogs.com", "");
技术分享        ht.Add("http://www.sina.com.cn/sport", "");
技术分享        ht.Add("http://www.sina.com.cn/ent", "");

          foreach(var kvp in ht)
技术分享              Console.WriteLine(kvp.Key);

Hashtable和Dictionary<T,K>的使用