【问题标题】:What is difference between ArrayList and Hashtable in C#?C# 中的 ArrayList 和 Hashtable 有什么区别?
【发布时间】:2011-07-21 14:32:25
【问题描述】:

我想在 ArrayList 或 Hastable 中存储数据集合,但数据检索应该高效且快速。我想知道ArrayList和Hastable之间隐藏的数据结构(即链表、双链表)

【问题讨论】:

    标签: c#-3.0


    【解决方案1】:

    ArrayList 是一个动态数组,随着添加超出列表当前容量的新项目而增长。 ArrayList 中的项目通过索引访问,很像数组。

    Hashtable 是幕后的哈希表。底层数据结构通常是一个数组,但不是通过索引访问,而是通过一个键字段访问,该字段通过调用键对象的 GetHashCode() 方法映射到哈希表中的某个位置。

    一般来说,ArrayListHashtable 在 .NET 2.0 及更高版本中不鼓励使用,而支持 List<T>Dictionary<TKey, TValue>,它们是更好的通用版本,性能更好,并且没有值类型的装箱成本.

    我有一篇博文比较了这里可能有用的每个通用容器的各种优点:

    http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspx

    虽然它特别讨论了通用集合,但ArrayList 的复杂性成本与List<T>HashtableDictionary<TKey, TValue> 相似

    【讨论】:

      【解决方案2】:

      哈希表会将字符串值映射到哈希表中的值。数组列表按编号顺序放置一堆项目。

      Hastable ht = new Hastable();
      ht("examplenum") = 5;
      ht("examplenum2") = 7;
      //Then to retrieve
      int i = ht("example");  //value of 5
      
      ArrayList al = new ArrayList();
      al.Add(2);
      al.Add(3);
      //Then to retrieve
      int j = al[0]  //value of 2
      

      【讨论】:

        【解决方案3】:

        顾名思义,一个 ArrayList(或一个 List)是用一个 Array 来实现的……事实上,一个 Hashtable 也是用相同的数据结构来实现的。所以他们都有一个恒定的访问成本(最好的)。

        你需要考虑的是你需要什么样的钥匙。如果您的数据必须使用任意键(例如,字符串)访问,您将无法使用 ArrayList。此外,如果键(或多或少)不相关,则 Hashtable 应该是您的首选。

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-27
          • 2021-01-02
          • 1970-01-01
          • 2014-06-29
          • 1970-01-01
          • 2018-10-03
          • 2011-02-28
          相关资源
          最近更新 更多