List vs ArrayList vs Dictionary vs Hashtable vs Stack vs Queue?

时间:2012-08-10 12:55:11

标签: c# collections

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

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

3 个答案:

答案 0 :(得分:96)

解释

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

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

  • 列表 - 支持泛型类型并强制执行类型安全的数组列表。由于它是非连续的,因此它可以增大,而无需为整个列表重新分配内存。这是更常用的列表集合。

散列

哈希是查找,您可以在列表中为列表中的每个项目提供一个“密钥”,稍后将使用该密钥进行检索。想象一个像表索引这样的哈希,你可以在这里提出问题,“我将通过这个字符串值找到这个对象。不允许重复键。” p>

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

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

队列

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

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

  • 队列 - 一个FIFO(先进先出)列表,您可以将记录放在顶部,然后将其从底部弹出。

答案 1 :(得分:11)

  • List可以容纳重复的对象

  • ArrayList仅用于与IList不存在的旧版本框架兼容

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

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

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

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

答案 2 :(得分:2)

以下是它们的一些用途。

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

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

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

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

另一个有趣的用途是,在视频游戏库存方法中,您可以在堆栈中拾取项目(推送),并将项目(弹出)从堆栈中删除。

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

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