【问题标题】:List vs ArrayList vs Dictionary vs Hashtable vs Stack vs Queue? [closed]List vs ArrayList vs Dictionary vs Hashtable vs Stack vs Queue? [关闭]
【发布时间】:2012-08-07 18:45:54
【问题描述】:

我们可以使用其中任何一个(包括 List、ArrayList、Dictionary、Hashtable、Stack、Queue)来保存值或对其他对象的引用作为集合。

但是,我的问题是什么时候使用哪个?

【问题讨论】:

  • 您可以通过在此处提出一系列问题来学习所有 .Net 和 C#,但买一本好书要容易得多!
  • @Baboon:没有人会因为在 SO 上问这样的问题而被禁止。
  • @TimSchmelter 这个已经很陈词滥调了:明显缺乏前期研究,问题太笼统了。此外,我的意思是“你不能通过问一系列关于 SO 的问题来学习所有 .Net 和 C#”,因为你最终会问很多重复的、无趣的、缺乏研究的问题

标签: c# collections


【解决方案1】:

列表

列表允许重复项,可以按索引访问,支持线性遍历。

  • ArrayList - 不支持泛型类型的基于数组的列表。它不强制执行类型安全,通常应避免使用。

  • List - 支持泛型类型并强制执行类型安全的数组列表。由于它是不连续的,它可以在不为整个列表重新分配内存的情况下增长。这是比较常用的列表集合。

哈希

哈希是一种查找方法,您可以在其中为列表中的每个项目指定一个“键”,稍后将使用该键来检索它。将哈希想象为表索引,您可以在其中提出诸如“我将通过 this 字符串值查找 this 对象。不允许重复键。

  • HashTable - 一个基本的键值对映射,其功能类似于索引列表。

  • 字典 - 支持泛型类型和强制类型安全的哈希表。

队列

队列控制如何访问列表中的项目。您通常在特定方向(从前面或后面)从队列中推送/弹出记录。中间不用于随机访问。

  • 堆栈 - 一个 LIFO(后进先出)列表,您可以在其中推送/弹出记录。

  • 队列 - 一个 FIFO(先进先出)列表,您可以在其中将记录推送到顶部并从底部弹出。

【讨论】:

    【解决方案2】:
    • List 可以保存重复的对象

    • ArrayList 只是为了与不存在 IList 的旧版本框架兼容

    • Dictionary 用于存储键/值对。您不能有重复的密钥。

    • Hashtable 基本上是一个没有重复可能性的 List(在某些情况下性能更好)

    • Stack 按添加的顺序存储对象(通过Push()),当您检索对象时(通过Pop()),它会以后进先出的方式从堆栈中删除。

    • Queue 与堆栈非常相似,只是它是 FIFO。

    【讨论】:

    • a) 不能有重复的键和 b) 没有重复的可能性有什么区别
    • 在这种情况下没有区别。两者都无法存储重复的密钥。除了性能问题之外,Hashtable 还没有通用实现。
    • 你没有很好地区分Hashtable和Dictionary
    • @Chandraprakash 为了帮助您和其他人寻找答案:Hashtable 是一个松散类型(非泛型)集合,Dictionary 是一个泛型集合。这意味着 Hashtable 可以同时使用任何类型的键和值,Dictionary asks 在构建期间将使用什么类型的键和值。
    【解决方案3】:

    以下是它们的一些用途。

    清单:如果您只想要一个清单而不关心任何重复项,即人员清单、购物清单、生活中要做的事情清单。

    队列:如果你想模拟一个队列,例如,在医院你有一个队列和优先队列(在急诊室)。分诊将确定谁处于危急状态并需要接受治疗。

    另一个例子是购物队列,排队的第一个人“通常”是第一个结账的人。

    堆栈:在您将值传递给函数/方法时,在您的内部存储器中用于推送和弹出值。

    另一个有趣的用途是,在视频游戏库存方法中,您可以将一个项目捡起(推)到堆栈上,然后将一个项目从堆栈中放下(弹出)。

    Hash/Dictionary:这些通常用于数据库中,用于查找和索引。

    根据您要模拟的内容,我同意其他人的观点,阅读数据结构很方便。一本书有帮助,但互联网也有丰富的信息。

    【讨论】:

    • 感谢实时示例!
    猜你喜欢
    • 2011-01-15
    • 2021-12-19
    • 2012-11-17
    • 2017-06-20
    • 1970-01-01
    • 2023-04-09
    • 2011-07-08
    • 2013-03-13
    相关资源
    最近更新 更多