HashSet<T> t = new HashSet<T>();
// add 10 million items
Dictionary<K, V> t = new Dictionary<K, V>();
// add 10 million items.
Чей .Contains
метод возвратится более быстрый?
Просто для уточнения мое требование, у меня есть 10 миллионов объектов (хорошо, строки действительно), что я должен проверить, существуют ли они в структуре данных. Я никогда не буду выполнять итерации.
Я полагаю, вы имеете в виду Dictionary
во втором случае? HashTable
не является универсальным классом.
Вы должны выбрать подходящую коллекцию для работы, исходя из ваших реальных требований. Вы действительно хотите, чтобы отображал каждый ключ в значение? В таком случае используйте Dictionary <,>
. Если вы только заботитесь об этом как о наборе, используйте HashSet <>
.
Я ожидаю, что HashSet
и Dictionary
(которые являются сопоставимыми операциями, если вы разумно используете свой словарь), в основном выполняют то же самое - в основном они используют один и тот же алгоритм. Я полагаю, что, если записи в Dictionary <,>
будут больше, вы получите большую вероятность взрыва кеша с помощью Dictionary <,>
, чем с HashSet <>
, но я бы ожидал, что это будет незначительным по сравнению с болью выбора неправильного типа данных просто с точки зрения того, чего вы пытаетесь достичь.
Это разные структуры данных. Также не существует универсальной версии HashTable
.
HashSet
содержит значения типа T, который HashTable
(или Dictionary
) содержит пары ключ-значение. Итак, вам следует выбрать сбор, какие данные вам нужно хранить.