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

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

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

清单

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

  • ArrayList – 不支持genericstypes的基于数组的列表。 它不强制types安全,一般应避免。

  • List – 一个支持genericstypes并强制types安全的数组列表。 由于它是不连续的,所以它可以在不重新分配整个列表的内存的情况下增长。 这是更常用的列表集合。

哈希

哈希值是查找的,在这个查询中,你给列表中的每个项目一个“键”,以后用它来检索它。 想想像表索引这样的散列,你可以问这样的问题:“我要通过这个string值来find这个对象,重复的键是不允许的。

  • HashTable – 一个基本的键值对映射,像索引列表一样工作。

  • Dictionary – 一个支持genericstypes并强制types安全的哈希表。

队列

队列控制如何访问列表中的项目。 您通常从特定方向(从正面或背面)推入/popup队列中的logging。 不用于中间的随机访问。

  • 堆栈 – 一个LIFO(后进先出)列表,您可以在上面popup/popuplogging。

  • 队列Queue) – 先进先出(FIFO)列表,您可以将logging顶部推出并从底部popup。

  • 列表可以保存重复的对象

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

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

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

  • 堆栈按顺序存储对象(通过Push() ),当你检索对象时(通过Pop() ),它以LIFO方式从堆栈中移除。

  • 队列与FIFO非常相似,只不过是FIFO。

这是他们的一些用途。

列表:如果你只是想要一个列表,不关心任何重复,即人的名单,购物清单,生活中的事情列表。

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

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

堆栈:在你的内存中用来传递值和值,并将它们传递给函数/方法。

另一个有趣的用途是,在video游戏库存方法中,您可以在其中拾取物品(推送)到堆栈上,并从堆栈中删除物品(popup)。

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

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