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

Suj*_*jit 64 c# collections

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

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

Jor*_*mer 97

清单

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

  • ArrayList - 不支持泛型类型的基于数组的列表.它不强制类型安全,通常应该避免.

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

哈希

哈希是查找,您可以在列表中为列表中的每个项目提供一个"密钥",以便稍后检索它.想象一个像表索引这样的哈希,你可以问这样的问题,"我将通过这个字符串值找到这个对象.不允许重复键.

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

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

队列

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

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

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


Lou*_*ann 12

  • 列表可以包含重复的对象

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

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

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

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

  • 除了FIFO之外,队列与堆栈非常相似.