Спросят с вероятностью 19%
HashMap и Hashtable являются двумя структурами данных, предназначенными для хранения данных в форме пар "ключ-значение", но между ними есть несколько ключевых отличий:
Синхронизация
- Hashtable является потокобезопасным благодаря синхронизации методов. Это означает, что он безопасно использовать в многопоточных приложениях без внешней синхронизации.
- HashMap не является потокобезопасным и не обеспечивает синхронизацию методов. Это делает его более быстрым в средах с однопоточным доступом. Для использования в многопоточных приложениях необходимо обеспечивать внешнюю синхронизацию или использовать
ConcurrentHashMap.Null значения
- HashMap позволяет один его ключ и множество его значений.
- Hashtable не позволяет такой ключи и такие значения. Попытка вставить его в
Hashtable приведет к выбросу NullPointerException.Наследование
- HashMap является частью новой коллекционной фреймворка, введенной в Java 2, и наследует абстрактный класс
AbstractMap.- Hashtable была введена в ранних версиях Java и наследует класс
Dictionary. Хотя она была реорганизована в коллекционный фреймворк, она считается устаревшей для нового кода.Итератор и Enumerator
- HashMap предоставляет итераторы, которые используются для перебора элементов. Итераторы
HashMap являются fail-fast, что означает, что они выбросят ConcurrentModificationException, если структура HashMap будет изменена в любое время после создания итератора, кроме его собственных методов remove.- Hashtable предоставляет как итератор, так и
Enumerator. Enumerator для Hashtable не является fail-fast.Производительность
- HashMap обычно предлагает лучшую производительность в сравнении с
Hashtable, поскольку отсутствие синхронизации делает его быстрее.Резюме
- Используйте
HashMap для не потокобезопасных реализаций без null ключей и значений.- Используйте
Hashtable в многопоточных приложениях, где требуется потокобезопасность и отсутствие null ключей и значений.- В современном Java коде предпочтение обычно отдается
ConcurrentHashMap для потокобезопасных реализаций и HashMap для остальных случаев за счет лучшей производительности и более широкой функциональности.👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент
🔐 База собесов | 🔐 База тестовых