Подтвердить что ты не робот

Каковы различия в хэш-таблице, словаре и KeyValuePair?

Я использую словарь в своем коде, но мои коллеги используют Hashtable. MSDN говорит, что они работают с парой Key Value & примеры Hashtable и словаря одинаковы в MSDN.

Тогда насколько они отличаются друг от друга и какие из них лучше или подходят для разницы?

4b9b3361

Ответ 1

Hashtable - нетипизированный ассоциативный контейнер, который использует класс DictionaryEntry для возврата результатов перечисления через его пары ключ-значение.

Dictionary<K,T> является общей заменой Hashtable, которая была введена в С# 2.0. Он использует KeyValuePair<K,T> общие объекты для представления своих пар ключ-значение.

Единственное место, где вы должны увидеть Hashtable в эти дни, - это устаревший код, который должен выполняться на .NET 1.1, прежде чем будут представлены дженерики. Он поддерживался по соображениям совместимости, но вы должны предпочесть Dictionary<K,T>, когда можете.

Ответ 2

KeyValuePair - это единица данных, хранящихся в Hashtable (или Dictionary). Они не эквивалентны друг другу.

Пара ключевых значений содержит один ключ и одно значение. Словарь или хеш-таблица содержит сопоставление многих ключей с их соответствующими значениями.

KeyValuePair полезен, когда вы хотите хранить две связанные части информации как единое целое, особенно когда одно связано с другим способом идентификации (например, 1234 = > "Дэвид Смит" ). Они также являются тем, что вы возвращаете, когда вы перебираете словарь. В .NET 4.0 они действительно предназначены только для использования внутри класса Dictionary- Tuple, который был введен для общего использования.

Разница между Hashtable и Dictionary заключается в том, что Hashtable не является общим классом - оба ключа и значения имеют тип Object. Dictionary является общим и обычно должен использоваться в пользу Hashtable в любой новой разработке.

Ответ 3

Словарь - это типизированная хэш-таблица. Если вы знаете тип данных ключа и значение, используйте словарь по причинам производительности (избегайте кастинга).

Ответ 4

Одно существенное отличие состоит в том, что Hashtable является потокобезопасным, а Dictionary - нет.

В документации говорится:

Hashtable является потокобезопасным для использования несколькими потоками чтения и одним потоком записи. Он является потокобезопасным для многопоточного использования, когда только один из потоков выполняет операции записи (обновления), что позволяет читать без блокировки при условии, что сценаристы сериализуются в Hashtable. Для поддержки нескольких авторов все операции над Hashtable должны выполняться через оболочку, возвращаемую методом Synchronized, при условии, что нет потоков, читающих объект Hashtable.

Сравните это с Dictionary документацией:

A Dictionary(Of TKey, TValue) может поддерживать несколько считывателей одновременно, пока коллекция не будет изменена.