
I liked a James Michael Hare’s post “C#/.NET Fundamentals: Choosing the Right Collection Class“, and I like to re-blog the comparison table:
| Collection | Ordering | Contiguous Storage? | Direct Access? | Lookup Efficiency | ManipulateEfficiency | Notes |
|---|---|---|---|---|---|---|
| Dictionary | Unordered | Yes | Via Key | Key:O(1) | O(1) | Best for high performance lookups. |
| SortedDictionary | Sorted | No | Via Key | Key: O(log n) | O(log n) | Compromise of Dictionary speed and ordering, uses binarysearch tree. |
| SortedList | Sorted | Yes | Via Key | Key:O(log n) | O(n) | Very similar toSortedDictionary, except tree is implemented in an array, so has faster lookup on preloaded data, but slower loads. |
| List | User has precise control over element ordering | Yes | Via Index | Index: O(1) Value: O(n) |
O(n) | Best for smaller lists where direct access required and no sorting. |
| LinkedList | User has precise control over element ordering | No | No | Value:O(n) | O(1) | Best for lists where inserting/deleting in middle is common and no direct access required. |
| HashSet | Unordered | Yes | Via Key | Key:O(1) | O(1) | Unique unordered collection, like a Dictionary except key and value are same object. |
| SortedSet | Sorted | No | Via Key | Key:O(log n) | O(log n) | Unique sorted collection, like SortedDictionary except key and value are same object. |
| Stack | LIFO | Yes | Only Top | Top: O(1) | O(1)* | Essentially same as List except only process as LIFO |
| Queue | FIFO | Yes | Only Front | Front: O(1) | O(1) | Essentially same as List except only process as FIFO |