【问题标题】:Should I use a Dictionary for collections with 10 items or less, or is there a better alternative?我应该对包含 10 个或更少项目的集合使用字典,还是有更好的选择?
【发布时间】:2011-01-26 01:11:06
【问题描述】:

我有一个对象列表,我需要尽快找到一个对象(通过它的 name 属性)。我应该使用什么数据结构?我知道我可以使用字典,但列表中的项目永远不会超过 10 个,如果我没记错的话,如果集合包含 10 个或更少的项目,则字典将作为数组实现。

谢谢。

【问题讨论】:

  • 对于 10 个或更少的项目,您使用哪种类型的结构可能并不重要。
  • 数据结构的选择取决于很多因素,而不仅仅是大小。多久插入和删除元素?寻找物体的速度有多重要?这将在紧密循环中使用吗?插入和移除的速度有多重要? 10 件是硬性限制还是一个大概?
  • 您是否分析过您的应用程序并确定这是一个性能瓶颈?如果是这样,我会感到非常惊讶。
  • @ChrisMarisic - 理论上的时间复杂度无关紧要,但它可能对实际性能非常重要。可能有数百万次这样的操作,显然家伙不关心它只运行一次。也没有人像我一样在发布这个问题多年后阅读这个问题。
  • @julkiewicz 那么你已经知道你的答案了,数组,答案就在那里。

标签: c# .net data-structures collections dictionary


【解决方案1】:

由于您希望通过属性进行最快的查找,您应该使用Dictionary<Key, Value>。如果您想要快速查找,大小不会伤害您。并不是说只有 10 个或更少的 Dictionary<Key, Value> 会占用大量内存。 Dictionary<Key, Value> 有一个构造函数,它接受一个 int 来设置容量。

【讨论】:

    【解决方案2】:

    为什么不直接使用 Hashtable?它位于 System.Collections 命名空间中。

    【讨论】:

    【解决方案3】:

    如果您确定少于十个项目,您可能需要考虑System.Collections.Specialized.ListDictionary

    还要考虑System.Collections.Specialized.HybridDictionary,它会在大小增加到阈值以上时切换行为(开销很小),如果您的假设是错误的,这很方便。

    【讨论】:

      【解决方案4】:

      MSDN 建议将 ListDictionary 用于包含 10 个或更少项目的集合:

      这是使用单链表的 IDictionary 的简单实现。如果元素数量为 10 或更少,它比 Hashtable 更小更快。如果性能对大量元素很重要,则不应使用此选项。

      【讨论】:

      • 该建议可能已过时,因为 ListDictionary 不是通用的。文档从一开始就这么说。
      • 谢谢安娜,这似乎是我问题的完美答案。
      猜你喜欢
      • 2018-06-26
      • 2021-01-02
      • 1970-01-01
      • 2014-01-16
      • 2020-09-03
      • 1970-01-01
      • 2015-07-02
      • 2017-05-02
      • 1970-01-01
      相关资源
      最近更新 更多