← Назад к вопросам

Можно ли в Hash коллекциях хранить null?

2.0 Middle🔥 171 комментариев
#Коллекции#ООП

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Null в Hash коллекциях

Ответ зависит от конкретной коллекции.

HashMap

ДА, HashMap позволяет хранить null:

  • Один null ключ
  • Много null значений
Map<String, String> map = new HashMap<>();
map.put(null, "value");
map.put("key", null);
System.out.println(map.get(null)); // value

HashSet

ДА, HashSet позволяет хранить один null.

ConcurrentHashMap

НЕТ, не допускает null ни для ключей, ни для значений. Это сделано для безопасности в многопоточной среде.

ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
map.put(null, "value"); // NullPointerException!

TreeMap

НЕТ, не допускает null ключи (нужна сортировка). Значения могут быть null.

Различие между get(null) и отсутствием ключа

Map<String, String> map = new HashMap<>();
map.put("key", null);

if (map.get("missing") == null) {
    // Не ясно: ключа нет или значение null?
}

// Правильно:
if (!map.containsKey("missing")) {
    System.out.println("Ключа нет");
}

Best Practice

Используй getOrDefault или Optional для избежания null:

String value = map.getOrDefault("key", "default");

Optional.ofNullable(map.get("key"))
    .ifPresent(System.out::println);

Таблица:

  • HashMap: null ключ (1 шт), null значения (много) - ДА
  • HashSet: один null - ДА
  • ConcurrentHashMap: никаких null - НЕТ
  • TreeMap: null ключи - НЕТ, null значения - ДА
Можно ли в Hash коллекциях хранить null? | PrepBro