junior
Зачем нужен HashMap, если есть Hashtable
HashMap был добавлен в Java 1.2 как несинхронизированная замена Hashtable, по тем же причинам, что и ArrayList для Vector.
| Характеристика | HashMap | Hashtable |
|---|---|---|
| Синхронизация | Нет | Все методы synchronized |
| null-ключ | Допускает (один) | Не допускает (NPE) |
| null-значение | Допускает (любое кол-во) | Не допускает (NPE) |
| Итератор | fail-fast (Iterator) | Enumeration + Iterator |
| Версия Java | 1.2 (JCF) | 1.0 (legacy) |
| Производительность | Быстрее | Медленнее |
| Статус | Рекомендуется | Устаревший |
Hashtable — устаревший класс, его использование не рекомендовано. Для потокобезопасного ассоциативного массива следует использовать ConcurrentHashMap, который обеспечивает лучшую масштабируемость за счет сегментной блокировки (в Java 8+ — блокировки на уровне корзин).
На собеседовании: назовите три отличия: синхронизация, null, fail-fast. Упомяните ConcurrentHashMap как правильную потокобезопасную альтернативу.