c# - 在Hashtable中打印的顺序?

标签 c# .net collections hashtable console.writeline

请参阅此处的示例,我按此顺序存储值!但是我得到的输出是不同的!为什么?哈希表以什么顺序存储值?

      {               
        Hashtable ht = new Hashtable();
        ht.Add("001", "Zara Ali");
        ht.Add("002", "Abida Rehman");
        ht.Add("003", "Joe Holzner");
        ht.Add("004", "Mausam Benazir Nur");
        ht.Add("005", "M. Amlan");
        ht.Add("006", "M. Arif");
        ht.Add("007", "Ritesh Saikia");

        ICollection key = ht.Keys;

        foreach (string k in key)
         {
            Console.WriteLine(k + ": " + ht[k]);
         }

       }


乌普特

006: M. Arif
007: Ritesh Saikia
003: Joe Holzner
002: Abida Rehman
004: Mausam Benazir Nur
001: Zara Ali
005: M. Amlan

最佳答案

哈希表不能保证其中元素的定义顺序。哈希表的实现根据其哈希码及其内部实现将值分成不同的存储桶,这意味着相同的值在不同的计算机,不同的运行或框架的不同版本上可能具有不同的顺序。这是因为哈希表针对按键检索而不是按顺序检索进行了优化。

如果您希望可以同时按键和按顺序访问集合,请使用专门的集合之一。通过使用Hashtable而不是Dictionary<K,V>判断,可能使用的是.NET 1.1,在这种情况下,可以使用SortedList来内部维护顺序。较新版本的.NET具有SortedList<K,V>OrderedDictionary<K,V>,它们的性能特征有所不同:


What's the difference between SortedList and SortedDictionary?

关于c# - 在Hashtable中打印的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27598127/

相关文章:

c# - SCGI 脚本引擎服务器? (C#、Java、PHP)

java - 为什么不能执行 Set <Object> = new TreeSet <String>

c# - 清除所有文本框(任何快捷方式)

c# - WPF - 在文本框旁边动态添加按钮

c# - Microsoft Graph SDK 请求批量响应的下一个链接

.net - 避免 Web 服务神类

.net - 为什么我的程序集在安装到 GAC 时在 "Add Reference > .Net"中不可见?

java - 有没有更简单的方法从对象集合中收集字符串?

.net - 当 Collection 数据源更新时更新 ListView

c# - Linq 左连接多个表