Вернёт ли метод equals true для двух Map, содержащих одинаковые ключи с null-значениями?

«Вернёт ли метод equals true для двух Map, содержащих одинаковые ключи с null-значениями?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, вернёт true. Контракт метода Map.equals() требует сравнения наборов записей (key-value pairs). Запись с null-значением считается валидной и участвует в сравнении.

Пример:

Map<String, String> map1 = new HashMap<>();
map1.put("keyA", null);

Map<String, String> map2 = new HashMap<>();
map2.put("keyA", null);

System.out.println(map1.equals(map2)); // Вывод: true

Как работает сравнение:

  1. Сравниваются наборы ключей (keySet). Если они не равны, метод возвращает false.
  2. Для каждого ключа из первого набора проверяется равенство значений с помощью Objects.equals(value1, value2). Этот метод корректно обрабатывает null (возвращает true, если оба аргумента null).

Таким образом, null-значения корректно сравниваются между собой.