В С#.NET мне нравится использовать HashSets из-за их предполагаемой сложности времени O (1) для поиска. Если у меня есть большой набор данных, которые будут запрошены, я часто предпочитаю использовать HashSet для списка, так как он имеет эту сложность времени.
Что меня смущает, это конструктор для HashSet, который принимает IEqualityComparer как аргумент:
http://msdn.microsoft.com/en-us/library/bb359100.aspx
В приведенной выше ссылке примечания отмечают, что "конструктор - это операция O (1)", но если это так, мне любопытно, если поиск по-прежнему равен O (1).
В частности, мне кажется, что если бы я должен был написать Comparer для перехода к конструктору HashSet, всякий раз, когда я выполняю поиск, код Comparer должен выполняться на каждом ключе, чтобы проверить, чтобы увидеть если был матч. Это не было бы O (1), но O (n).
Встраивается ли внутренняя реализация таблицы поиска в качестве элементов в коллекцию?
В общем, как я могу узнать информацию о сложности структур данных .NET?