Назад к вопросам
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.