2010-03-10 3 views
12

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

Спасибо.

+6

Для 10 предметов или менее, вероятно, не имеет значения, какой тип структуры вы используете. –

+0

Выбор структуры данных зависит от множества факторов, отличных от размера. Как часто элементы будут вставлены и удалены? Насколько критична скорость поиска объекта? Будет ли это использоваться в жесткой петле? Насколько критична скорость вставки и удаления? Является ли 10 предметов жестким лимитом или стадией? –

+1

Профилировали ли вы свое приложение и определили это как узкое место в производительности? Я был бы очень удивлен, если бы это было так. – TrueWill

ответ

10

MSDN рекомендует ListDictionary для коллекций с 10 пунктов или менее:

Это простая реализация IDictionary с использованием односвязанны список. Он меньше и быстрее, чем Hashtable, если количество элементов равно 10 или меньше. Это не следует использовать, если производительность важна для большого количества элементов.

+0

+1 Это звучит идеально для этой цели! –

+9

Эта рекомендация может быть устаревшей, поскольку ListDictionary не является общим. Документы сказали это с самого начала. –

+0

Спасибо, Анна, это прекрасный ответ на мой вопрос. –

4

Возможно, вы захотите рассмотреть вопрос о System.Collections.Specialized.ListDictionary, если вы уверены, что будет меньше десяти предметов.

Также рассмотрите System.Collections.Specialized.HybridDictionary, который переключает поведение (с небольшими накладными расходами), если размер увеличивается выше порогового значения, удобно, если ваше предположение неверно.

0

Почему бы просто не использовать Hashtable? Он находится в пространстве имен System.Collections.

+2

Поскольку классы Dictionary <> и Hashtable являются реализациями хеш-таблиц и имеют накладные расходы при вычислении хэш-кода для каждого элемента, который платит только за себя, когда коллекция не является тривиально малой. –

2

Поскольку вы хотите получить быстрый доступ к объекту, вы должны использовать Dictionary<Key, Value>. Размер не повредит вам, если вы хотите быстро найти. Дело не в том, что Dictionary<Key, Value> всего 10 предметов или меньше занимают тонну памяти. Dictionary<Key, Value> имеет конструктор, который принимает значение int, чтобы установить емкость.

Смежные вопросы