List vs ArrayList vs Dictionary vs Hashtable vs Stack vs Queue? [closed]

We can use any of these (includes List, ArrayList, Dictionary, Hashtable, Stack, Queue) to hold value or hold reference to other objects as a collection.

But, my question is which one is used when?


Lists

Lists allow duplicate items, can be accessed by index, and support linear traversal.

  • ArrayList - An array-based list that doesn't support generic types. It does not enforce type safety and should generally be avoided.

  • List - An array list that supports generic types and enforces type-safety. Since it is non-contiguous, it can grow in size without re-allocating memory for the entire list. This is the more commonly used list collection.

Hashes

Hashes are look-ups in which you give each item in a list a "key" which will be used to retrieve it later. Think of a hash like a table index where you can ask questions like "I'm going to find this object by this string value. Duplicate keys are not allowed.

  • HashTable - A basic key-value-pair map that functions like an indexed list.

  • Dictionary - A hashtable that supports generic types and enforces type-safety.

Queues

Queues control how items in a list are accessed. You typically push/pop records from a queue in a particular direction (from either the front or back). Not used for random access in the middle.

  • Stack - A LIFO (last in, first out) list where you push/pop records on top of each other.

  • Queue - A FIFO (first in, first out) list where you push records on top and pop them off the bottom.


  • List can hold duplicate objects

  • ArrayList is just for compatibility with older versions of the framework where IList didn't exist

  • Dictionary is used to store pairs of key/value. You cannot have duplicate keys.

  • Hashtable is basically a List with no possibility of duplicates (and better performance in some scenarios)

  • Stack stores objects in order they were added (through Push()), and when you retrieve an object (through Pop()) it is removed from the stack in a LIFO manner.

  • Queue quite similar to a Stack except it is FIFO.