Ответ
Выбор между List<T> и Dictionary<TKey, TValue> зависит от операций, которые будут выполняться с коллекцией чаще всего.
Используйте List<T>, когда:
- Важен порядок элементов. Список сохраняет последовательность вставки.
- Требуется частый доступ по индексу (например,
list[5]). Это операция O(1). - Выполняются частые итерации по всем элементам.
- Основные операции — добавление/удаление в конце коллекции (
Add,RemoveAt(list.Count-1)). - Вставка или удаление в середину списка — дорогая операция O(n), так как требует сдвига элементов.
// Оптимальный сценарий для List: последовательная обработка
List<string> logEntries = new List<string>();
logEntries.Add("Application started"); // Быстрое добавление в конец
logEntries.Add("User logged in");
foreach (var entry in logEntries) { /* Быстрая итерация */ }
string firstEntry = logEntries[0]; // Мгновенный доступ по индексу
Используйте Dictionary<TKey, TValue>, когда:
- Критически важен быстрый поиск значения по уникальному ключу. Это операция O(1) в среднем.
- Данные имеют ассоциативную природу (ключ → значение), например, кэш, справочники.
- Порядок элементов не важен (или используйте
OrderedDictionary,SortedDictionary). - Ключи должны быть уникальными. Попытка добавить дубликат вызовет исключение.
// Оптимальный сценарий для Dictionary: быстрый поиск по идентификатору
Dictionary<int, Customer> customerCache = new Dictionary<int, Customer>();
customerCache.Add(101, new Customer { Id = 101, Name = "Alice" });
// Мгновенное получение клиента по ID, даже в огромной коллекции
if (customerCache.TryGetValue(101, out Customer foundCustomer))
{
Console.WriteLine(foundCustomer.Name);
}
Итог: List — для упорядоченных последовательностей, Dictionary — для ассоциативных массивов с быстрым поиском по ключу.