| Start |
| HashSet This is a collection of unique items, with O(1) lookup. By way of comparison, doing a Contains on a List yields poorer performance: HashSet.Contains uses a hash table, so that lookups are extremely fast, regardless of the number of items in the collection. |
| Dictionary<TKey, TValue> Dictionary<TKey, TValue> is a map. For a given key there can be one value in the dictionary. Duplicate key when using collection initialization |
| SortedSet |
| T[ ] (Array of T) |
| List List<T> is a list of a given type. Items can be added, inserted, removed and addressed by index. List<T> can be thought of as an array that you can resize. Enumerating over the collection in order is quick, as is access to individual elements via their index. To access elements based on some aspect of their value, or some other key, a Dictionary<T> will provide faster lookup. |
| Stack |
| LinkedList Note that LinkedList<T> represents the doubly linked list. So, it's simply collection of nodes and each node contains an element of type T. Each node is linked to the preceding node and the following node. |
| Queue Thread safe heads up! Use [ConcurrentQueue](https://msdn.microsoft.com/en-us/library/dd267265) in multi-thread
environments. |