HashSet <T> по сравнению со Словарем <K, V> w.r.t ищущее время, чтобы найти, существует ли объект

HashSet<T> t = new HashSet<T>();
// add 10 million items


Dictionary<K, V> t = new Dictionary<K, V>();
// add 10 million items.

Чей .Contains метод возвратится более быстрый?

Просто для уточнения мое требование, у меня есть 10 миллионов объектов (хорошо, строки действительно), что я должен проверить, существуют ли они в структуре данных. Я никогда не буду выполнять итерации.

101
задан nawfal 24 May 2014 в 19:37
поделиться

2 ответа

Я полагаю, вы имеете в виду Dictionary во втором случае? HashTable не является универсальным классом.

Вы должны выбрать подходящую коллекцию для работы, исходя из ваших реальных требований. Вы действительно хотите, чтобы отображал каждый ключ в значение? В таком случае используйте Dictionary <,> . Если вы только заботитесь об этом как о наборе, используйте HashSet <> .

Я ожидаю, что HashSet .Contains и Dictionary .ContainsKey (которые являются сопоставимыми операциями, если вы разумно используете свой словарь), в основном выполняют то же самое - в основном они используют один и тот же алгоритм. Я полагаю, что, если записи в Dictionary <,> будут больше, вы получите большую вероятность взрыва кеша с помощью Dictionary <,> , чем с HashSet <> , но я бы ожидал, что это будет незначительным по сравнению с болью выбора неправильного типа данных просто с точки зрения того, чего вы пытаетесь достичь.

69
ответ дан 24 November 2019 в 04:40
поделиться

Это разные структуры данных. Также не существует универсальной версии HashTable .

HashSet содержит значения типа T, который HashTable (или Dictionary ) содержит пары ключ-значение. Итак, вам следует выбрать сбор, какие данные вам нужно хранить.

4
ответ дан 24 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: