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

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

В этой статье мы рассмотрим интересный вопрос из раздела Коллекции в Java, а именно «В чем разница между классами Hashtable и HashMap?». 

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

В ходе работы с каждым из классов было обнаружено значительное отличие в производительности на достаточно больших объемах данных. Познакомившись подробнее с документацией и особенностями работы каждой коллекции, решил написать эту статью — небольшую выжимку полученной информации для возможности быстро освежить знания в будущем. Коллекция Hashtable хоть и «древняя», но до сих пор используется на старых проектах. К тому же, практика показывает, что этот вопрос часто задают на собеседованиях.

Кратко о HashMap

HashMap реализует интерфейс Map, который подразумевает хранение данных в виде пар ключ-значение. HashMap не является синхронизированным и потокобезопасным. Также HashMap допускает хранение null ключей и значений, но недопускает дублей ключей. Следует помнить, что для null-ключа hashCode() всегда равен нулю.

Маленький пример использования HashMap:

Кратко о Hashtable

Hashtable реализует интерфейс Map, которая хранит пары ключ-значения. Hashtable является синхронизированной и потокобезопасной коллекцией. Hashtable не допускается null-ключей и дублирующих ключей, а также null-значений.

Пример использования HashMap:

А теперь рассмотрим разницу между Hashtable и HashMap на примере удобной таблички:

Характеристика
Hashtable
HashMap
Потокобезопасность
+
Синхронизированность
+
Производительность
Потокобезопасность и синхронизированность делает ее медленной
В однопоточной среде намного быстрее, чем Hashtable. Eсли вы не работаете с многопоточностью, то рекомендуется HashMap
Ключ == null?
Нельзя
Позволяет null ключ и null значение
Альтернатива
Нет альтернативы
Можно использовать ConcurrentHashMap для работы в многопоточной среде

Обратите внимание. Под синхронизированностью (synchonized) имеется ввиду следующее: только один поток может изменить одну таблицу в одно и то же время. Когда какой-то поток работает c Hashtable, то она закрыта для других потоков, пока не отработает один.

HashMap можно синхронизировать с помощью вызова такого метода:

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

Вот такая коротенькая шпаргалка поможет быстро освежить в памяти важные моменты при работе с Hastable и HashMap.

Следите за обновлениями раздела Работа с Коллекциями и подписывайтесь на новые статьи!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *