Основные отличия HashMap и Hashtable в Java:
| Признак | HashMap | Hashtable |
|---|---|---|
| Синхронизированность | Не синхронизирован | Синхронизирован |
| Потокобезопасность | Нет | Есть |
| Null ключи/значения | Разрешено один null ключ и множество null значений | Запрещены как null ключи, так и null значения |
| Производительность | Выше (не требует блокировок) | Ниже (из-за синхронизации) |
| Наследование | Collection Framework (с Java 1.2) | Более ранний класс (с Java 1.0), расширяет Dictionary |
| Итераторы | Fail-fast итераторы (Iterator, ListIterator) | Fail-safe итератор (Enumeration), также есть Fail-fast итераторы (Iterator) |
java
HashMap предпочтительнее в большинстве случаев, когда потокобезопасность не требуется явно, благодаря лучшей производительности. Hashtable используется реже и в основном для совместимости с более старым кодом или в случаях, когда синхронизированность необходима. В многопоточной среде для потокобезопасной хеш-карты обычно используют ConcurrentHashMap.