码迷,mamicode.com
首页 > 其他好文 > 详细

Hashtable和Dictionary<T,K>的使用

时间:2015-01-05 00:26:33      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

由于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>的使用

标签:

原文地址:http://www.cnblogs.com/coolsundy/p/4202554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!