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 (throughPop()
) it is removed from the stack in a LIFO manner.Queue quite similar to a Stack except it is FIFO.