HashMap и Hashtable

Anonim

Структура Java Collections предоставляет набор классов коллекции. У каждого класса есть свои сильные и слабые стороны. Некоторые из классов предоставляют полные реализации, которые можно использовать как есть. Другие являются абстрактными, которые обеспечивают скелетные реализации, которые используются в качестве отправных точек для создания коллекций. В реализациях коллекции используется структура synchronized-wrapper для предоставления синхронизированных классов, в противном случае реализации несинхронизированы. Несколько классов обеспечивают реализацию интерфейса карты.

Платформа Java содержит три реализации универсальной карты: HashMap, TreeMap и LinkedHashMap. HashMap и Hashtable - это две коллекции в Java, используемые для хранения пар ключ / значение в хеш-таблице. Hashtable - это синхронизированная карта, а HashMap - несинхронизированная карта. Тем не менее, если вам нужно использовать синхронизированную карту, Hashtable быстрее, чем использование HashMap в синхронизированной оболочке. Оба являются коллекциями на основе хэша в Java, но они имеют свою долю различий. Мы выделяем некоторые ключевые различия между ними, чтобы помочь вам лучше понять условия.

Что такое HashMap?

HashMap - это реализация карты на основе хеш-таблицы, которая обеспечивает постоянную производительность для вставки и нахождения пар. Класс HashMap предоставляет реализацию карты, основанную на структуре данных Hashtable. Эта реализация поддерживает все операции Map и допускает множество нулевых значений, но только один нулевой ключ. Он использует пары ключ / значение для хранения значений в хэш-таблице. Это несинхронизированная Карта, которая означает, что она не является потокобезопасной и не может быть разделена между несколькими потоками без надлежащей синхронизации.

Что такое Hashtable?

В отличие от HashMap, Hashtable - это синхронизированная Карта, и она является потокобезопасной, что означает, что она может быть разделена между несколькими потоками. В Hashtable вы указываете объект, который может использоваться как ключ и значение, которое идет с ключом. Hashtable сопоставляет ключи с значениями с помощью хэш-функции. Java предоставляет эту функцию в виде метода hashcode () объекта, классы которого переопределяют для предоставления соответствующих хэш-кодов. В отличие от HashMap, Hashtable не поддерживает нулевые значения и нулевые ключи, потому что есть нулевая проверка реализации метода put Hashtable.

Разница между HashMap и Hashtable

  1. Основы HashMap Vs. Хеш-таблица

Оба являются хэш-наборами в Java, используемыми для хранения данных в парах ключ / значение. HashMap - это реализация карты на основе хеш-таблицы, которая обеспечивает постоянную производительность для вставки и нахождения пар. Производительность может быть скорректирована с использованием конструкторов, которые позволяют вам задавать коэффициент емкости и нагрузки хэш-таблицы. Базовая Hashtable похожа на HashMap, даже вниз по именам методов. Он хранит пару ключ / значение в хэш-таблице. В Hashtable вы указываете объект, который может использоваться как ключ и значение, которое идет с ключом.

  1. Синхронизация HashMap Vs. Хеш-таблица

В HashMap и Hashtable используются методы хеширования для хранения значений на основе ключа. Как HashMap, Hashtable использует пары ключ / значение для хранения значений в хэш-таблице. Однако ключевым отличием между ними является синхронизация. HashMap - это несинхронизированная Карта, а Hashtable - это синхронизированная Карта. Это означает, что HashMap не является потокобезопасным и не может быть разделен между несколькими потоками без надлежащего кода синхронизации. Напротив, Hashtable является потокобезопасным и может делиться между несколькими потоками. Hashtable быстрее, чем использование HashMap в синхронизированной оболочке, если вам нужно использовать синхронизированную карту.

  1. Нулевые ключи и нулевые значения для HashMap Vs. Хеш-таблица

Класс HashMap предоставляет реализацию карты, основанную на структуре данных Hashtable. Эта реализация поддерживает все операции Map и допускает множество нулевых значений, но только один нулевой ключ, чтобы он мог поддерживать уникальные ключевые свойства. Тем не менее, он не дает никаких гарантий в том порядке, в котором хранятся записи. С другой стороны, Hashtable сопоставляет ключи значениям с помощью хэш-функции. В отличие от HashMap, Hashtable не поддерживает нулевые значения и нулевые ключи, потому что есть нулевая проверка реализации метода put Hashtable.

  1. Производительность HashMap Vs. Хеш-таблица

Поскольку HashMap не является синхронизированной Картой, она намного быстрее и эффективнее, чем Hashtable с точки зрения производительности, и на самом деле использует меньше памяти, чем Hashtable. Хотя они практически идентичны, Hashtable немного медленнее, чем HashMap, но быстрее, чем синхронизированный HashMap. Собственно, небезопасно использовать Hashtable с многопоточным доступом, потому что синхронизируются только методы. Hashtable является синхронизированным аналогом HashMap. Несинхронизированные объекты работают лучше по сравнению с синхронизированными объектами так же, как Hashtable лучше работает в одной потоковой среде.

HashMap против Hashtable: Сравнительная таблица

Резюме HashMap Vs. Хеш-таблица

Класс HashMap дает вам несортированную, неупорядоченную карту. Поэтому, когда вам нужна карта, и вам не нужен порядок, в котором хранятся записи, тогда HashMap - это путь.

Hashtable, как и Vector, находится в доисторических временах Java. Подобно тому, как Vector является синхронизированным аналогом более современного и расширенного ArrayList, Hashtable является синхронизированным аналогом HashMap. Тем не менее, класс не может быть синхронизирован, поэтому, когда мы говорим, что Hashtable является синхронизированной Картой, это означает, что ключевые методы класса синхронизированы.

Хотя оба они практически идентичны, разница заключается в том, как они синхронизируются и как они выполняются. HashMap работает лучше в многопоточной среде, тогда как Hashtable лучше работает в среде с одним потоком.