Hashtable和Dictionary<T,K>的内部排序

Hashtable和Dictionary<T,K>的内部排序算法不一样,请看代码

        Dictionary<string,string> ht=new Dictionary<stringstring>();
        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的排序应该是比较正常的,大家觉得呢?
芜湖不芜
浏览 515回答 3
3回答

慕运维8079593

Dictionary默认没有排序的意思是它将按你Add的顺序来存放,本身不会做排序操作 Hashtable的排序是根据Key的HashCode来进行的,HashCode来自于Key的GetHashCode方法,一般值类型都直接使用系统已经实现的GetHashCode方法,但引用类型多数情况下建议重写GetHashCode()

繁星淼淼

两者都相当于无序集合,顺序是无所谓的.
打开App,查看更多内容
随时随地看视频慕课网APP