Using Dictionary<Foo, Foo> Instead of List<Foo> to Speed up Calls to Contains()

c#, collections, dictionary, list

Solution

Yes, yes it is. That said, you probably want to use `HashSet` because you don't need both a key and a value, you just need a set of items.

It's also worth noting that `Dictionary` was added in C# 2.0, and `HashSet` was added in 3.5, so for all that time inbetween it was actually fairly common to use a Dictionary when you wanted a Set just because that was all you had (without rolling your own). When I was forced to do this I just stuck null in the value, rather than the item as the key and value, but the idea is the same.

Problem

I have a question about generic collections in C#. If I need to store a collection of items, and I'm frequently going to need to check whether an item is in the collection, would it be faster to use Dictionary instead of List? I've heard that checking if an item is in the collection is linear relative to the size for lists and constant relative to the size for dictionaries. Is using Dictionary and then setting Key and Value to the same object for each key-value pair something that other programmers frequently do in this situation? Thanks for taking the time to read this.

Original source

Related problems