Можно ли добавить элемент null в HashSet в Java?

«Можно ли добавить элемент null в HashSet в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. HashSet в Java допускает ровно один элемент null. Это поведение наследуется от реализации на основе HashMap, где HashSet хранит свои элементы как ключи в HashMap, а HashMap разрешает один ключ null.

Пример:

Set<String> set = new HashSet<>();
set.add(null);   // Успешно. set = [null]
set.add("A");    // Успешно. set = [null, "A"]
set.add(null);   // Не добавится, так как null уже присутствует. set = [null, "A"]

Важные уточнения:

  • HashSet и LinkedHashSet разрешают один null.
  • TreeSet НЕ разрешает null, так как он основан на TreeMap, которому для сравнения элементов нужен компаратор, а вызов compareTo() или compare() на null выбросит NullPointerException.
  • При итерации по HashSet, содержащему null, он будет корректно возвращен.

Вывод: HashSet поддерживает добавление одного элемента null, что может быть полезно для представления отсутствующего значения, но требует осторожности при использовании методов, не допускающих null (например, contains(null) работает).