Хеш-таблица (Hashtable) на языке C#. Для чего она?

154
23 февраля 2019, 20:20

Изучаю теорию, подскажите, какое практическое применение Hashtable.

Answer 1

Хеш таблица (Hashtable) VS словарь (Dictionary<TKey, TValue>).

Что общего:

  1. Оба работают как хранилище ключ-значение
  2. Оба обеспечивают (псевдо)константный доступ к значению по ключу
  3. Оба хранят данные в массиве корзин (расходы по памяти у обоих в линейной зависимости от количества элементов)

В чем разница:

  1. Таблица приводит ключи и значения к object, что добавляет расходов по памяти и скорости (на boxing/unboxing)
  2. Таблица, в отличии от словаря, поддерживает многопоточное чтение / однопоточную запись. Словарь же не рассчитан на несколько одновременных читателей / одного писателя (я однажды на этом запорол релиз, будьте аккуратней)
  3. У таблицы есть враппер для получения потокобезопасной таблицы. У словаря я такого не увидел.
  4. Таблица и словарь по разному обсчитывают коллизии. Таблица пользуется двойным хешированием, словарь хранит что то типа указателя на следующий элемент прямо в корзине (не знаю как этот метод называется). По идее (по моему мнению) из за этого словарь должен обрабатывать коллизии на чтение чууть быстрее, но я не проверял.
Answer 2

По сути Hashtable — это нетипизированная версия словаря (Dictionary<TKey, TValue>) и ее можно использовать в тех же ситуациях, когда вы использовали бы словарь.

Но в современных реалиях это очень редко требуется и лучше отдать предпочтение именно строготипизированной структуре данных.

READ ALSO
Как повысить права C# Linux

Как повысить права C# Linux

Надо в определенный момент работы программы установить в операционку корневой сертификатСоответственно для этого нужно повысить права...

171
Не обновляются данные в DataGridView в real-time

Не обновляются данные в DataGridView в real-time

В продолжении к вопросу

179