66

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

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

4

3 回答 3

105

列表

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

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

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

哈希

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

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

  • Dictionary - 支持泛型类型并强制类型安全的哈希表。

队列

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

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

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

于 2012-08-10T13:03:54.573 回答
14
  • 列表可以保存重复的对象

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

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

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

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

  • 队列与堆栈非常相似,只是它是先进先出。

于 2012-08-10T13:05:21.980 回答
3

以下是它们的一些用途。

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

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

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

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

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

哈希/字典:这些通常用于数据库中,用于查找和索引。

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

于 2012-08-10T13:17:04.177 回答