Вступить в клуб →
лёгкаявопросJava Core и многопоточность

Объект без hashCode в роли ключа HashMap: что вернёт get

В сервисе кэшируют статусы заказов в обычной HashMap. Ключ — свой класс, у которого переопределён только equals.

class OrderKey {
    private final String id;

    OrderKey(String id) { this.id = id; }

    @Override
    public boolean equals(Object o) {
        return o instanceof OrderKey && ((OrderKey) o).id.equals(this.id);
    }
}

Map<OrderKey, String> cache = new HashMap<>();
cache.put(new OrderKey("A-1"), "готов");
System.out.println(cache.get(new OrderKey("A-1")));

Что будет напечатано и почему?

  • готов — HashMap сравнивает ключи через equals, а он переопределён
  • null — hashCode не переопределён, и два равных по equals объекта попадают в разные корзины
  • готов — у одинаковых строк внутри объекта совпадает хеш, поэтому ключ найдётся
  • null — HashMap не принимает пользовательские классы в качестве ключей без реализации Comparable

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела