Встречается на 2% собеседований по Java

Что будет если использовать другой объект вместо строки как ключ

Если использовать другой объект вместо строки как ключ в HashMap или HashSet, поведение зависит от реализации методов equals() и hashCode().

Ключевые моменты:

  • Если hashCode() и equals() не переопределены, ключи будут сравниваться по ссылке (т.е. два разных объекта с одинаковыми полями — разные ключи).
  • Если переопределены корректно, объекты с одинаковыми полями будут считаться одним ключом.

Пример:

java
class Person {
    String name;
    Person(String name) { this.name = name; }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        return name.equals(((Person) o).name);
    }

    @Override
    public int hashCode() { return name.hashCode(); }
}

Map<Person, String> map = new HashMap<>();
map.put(new Person("Alice"), "Engineer");
System.out.println(map.get(new Person("Alice"))); // "Engineer" (работает)

Если не переопределить hashCode()/equals(), последний get() вернет null.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы