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)。
哈希/字典:这些通常被用在数据库中,用于查找和索引。
根据你想要模拟的内容,我同意其他的观点,阅读数据结构是很方便的。 一本书可以帮助,但互联网也有丰富的信息。