❔ Как устроен Dictionary внутри, и почему важен GetHashCode
Dictionary<TKey, TValue> обеспечивает поиск в среднем за O(1) благодаря хешированию.
🔵 Чем равномернее GetHashCode() распределяет ключи по бакетам, тем быстрее работает поиск. Если множество ключей попадает в один бакет, возникают коллизии, цепочки становятся длиннее, и производительность постепенно приближается к O(n).
При росте словарь увеличивает внутренние массивы и перераспределяет элементы, поэтому при известном размере коллекции стоит заранее указать capacity.
🔤 Ещё одно важное правило — ключ должен быть неизменяемым. Если после добавления изменить поле, участвующее в GetHashCode() или Equals(), словарь может перестать находить этот элемент.
💡 Для собственных типов ключей удобно использовать record, record struct или ValueTuple — для них корректные реализации Equals() и GetHashCode() генерируются автоматически.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#il_люминатор
Post #7178
3.31K

- ❤ 4