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