我们可以使用其中任何一个(包括List,ArrayList,Dictionary,Hashtable,Stack,Queue)来保存值或保存对其他对象的引用作为集合。
但是,我的问题是什么时候使用哪一个?
列表
列表允许重复项,可按索引访问,并支持线性遍历。
-
数组列表 - 不支持泛型类型的基于数组的列表。 它不强制类型安全,通常应避免使用。
-
List - 支持泛型类型并强制实施类型安全的数组列表。 由于它是不连续的,因此它可以在不为整个列表重新分配内存的情况下增加大小。 这是更常用的列表集合。
散 列
哈希是查找,您可以在其中为列表中的每个项目提供一个"键",该键将在以后用于检索它。 将哈希视为表索引,您可以在其中提出诸如"我将通过此字符串值找到此对象。 不允许使用重复的密钥。
-
哈希表 - 一个基本的键值对映射,其功能类似于索引列表。
-
字典 - 支持泛型类型并强制实施类型安全的哈希表。
队列
队列控制如何访问列表中的项目。 您通常从队列中向特定方向(从前面或后面)推送/弹出记录。 不用于中间的随机访问。
-
堆栈 - 一个 LIFO(后进先出)列表,您可以在其中将记录推送/弹出到彼此之上。
-
队列 - FIFO(先进先出)列表,您可以在其中将记录推送到顶部并从底部弹出。
-
列表可以保存重复的对象
-
ArrayList只是为了与不存在IList的旧版本的框架兼容。
-
字典用于存储键/值对。不能有重复的密钥。
-
哈希表基本上是一个列表,不可能重复(在某些情况下性能更好)
-
堆栈按添加对象的顺序(通过
Push()
)存储对象,当您检索对象(通过Pop()
)时,该对象将以LIFO方式从堆栈中删除。 -
队列与堆栈非常相似,只是它是 FIFO。
以下是它们的一些用途。
清单:如果你只想要一个清单,不关心任何重复,即人名单、购物清单、生活中要做的事情清单。
队列:例如,如果要模拟队列,则在医院中,您有一个队列和优先队列(在急诊室)。分诊将确定谁处于危急状态并需要接受治疗。
另一个例子是购物队列,排队的第一个人"通常"是第一个结账的人。
堆栈:在您的内部存储器中使用,用于在将值传递给函数/方法时推送和弹出值。
另一个有趣的用途是,在视频游戏库存方法中,您可以捡起一个物品(推)到堆栈上,然后将一个项目(弹出)从堆栈中掉落。
哈希/字典:这些通常用于数据库,用于查找和索引。
根据您要模拟的内容,我确实同意其他人的观点,阅读数据结构很方便。一本书有帮助,但互联网也有丰富的信息。