В C# Dictionary<TKey, TValue>
— это структура данных, реализующая ассоциативный массив (хеш-таблицу) для хранения пар ключ-значение. Она обеспечивает быстрый доступ к данным по ключу.
Создание и использование Dictionary<TKey, TValue>
Пример создания словаря:
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Один");
dict.Add(2, "Два");
Console.WriteLine(dict[1]); // Выведет "Один"
Особенности:
- Ключи уникальны.
- Доступ к элементам осуществляется за O(1) в среднем случае.
- Поддерживаются методы
Add
,Remove
,TryGetValue
и другие.
Внутреннее устройство Dictionary<TKey, TValue>
Dictionary<TKey, TValue>
основан на хеш-таблице и использует массив buckets
для хранения индексов элементов. Алгоритм работы:
- Вычисляется хеш-код ключа (
GetHashCode
). - По хеш-коду определяется индекс в массиве
buckets
. - Если ячейка пуста — добавляется новая пара ключ-значение.
- Если ключ уже существует — происходит коллизия, и используется цепочка связанных элементов (
LinkedList
илиentry[]
).
Пример работы хеширования:
int index = key.GetHashCode() % buckets.Length;
Обработка коллизий
Коллизии могут возникать, если разные ключи дают одинаковый хеш. Dictionary<TKey, TValue>
использует метод цепочек (chaining) для их разрешения, то есть хранит несколько элементов в одном bucket
через связанный список.
Основные особенности
- Быстрый доступ: поиск, добавление и удаление за O(1) в среднем.
- Требование уникальности ключей: одинаковый ключ не может встречаться дважды.
- Память: из-за хеш-таблицы расход памяти может быть выше, чем у
List<T>
.
Dictionary<TKey, TValue>
удобен для хранения и быстрого поиска данных по ключу. Он эффективен при большом количестве элементов и частых операциях поиска.