Назад к вопросам
Junior
70
questionbank
В чем разница между HashMap и Hashtable?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Основные отличия 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) |
// Пример использования HashMap с null
Map<String, String> hashMap = new HashMap<>();
hashMap.put(null, "Value for null key");
hashMap.put("Key with null value", null);
System.out.println(hashMap); // Output: {null=Value for null key, Key with null value=null}
// Пример использования Hashtable (попытка добавить null вызовет исключение)
Map<String, String> hashtable = new Hashtable<>();
// hashtable.put(null, "Value for null key"); // Вызовет NullPointerException
// hashtable.put("Key with null value", null); // Вызовет NullPointerException
HashMap предпочтительнее в большинстве случаев, когда потокобезопасность не требуется явно, благодаря лучшей производительности. Hashtable используется реже и в основном для совместимости с более старым кодом или в случаях, когда синхронизированность необходима. В многопоточной среде для потокобезопасной хеш-карты обычно используют ConcurrentHashMap.