Назад к вопросам
Junior — Middle
65
Что произойдет, если в качестве ключа в структуре данных использовать не строку, а другой тип объекта?
Ответ от нейросети
sobes.tech AI
В Java в качестве ключа в таких структурах данных, как HashMap, можно использовать любой объект, но при этом важно, чтобы класс этого объекта корректно переопределял методы hashCode() и equals(). Если ключ — не строка, а, например, пользовательский объект, то:
hashCode()должен возвращать стабильное и уникальное (по возможности) значение для корректного распределения в хэш-таблице.equals()должен корректно сравнивать объекты по смыслу, чтобы избежать коллизий и дубликатов.
Если эти методы не переопределены, то поведение коллекции будет некорректным: ключи могут не находиться, дубликаты могут появляться.
Пример:
class Key {
int id;
Key(int id) { this.id = id; }
@Override
public int hashCode() {
return Integer.hashCode(id);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Key)) return false;
Key other = (Key) o;
return this.id == other.id;
}
}
Map<Key, String> map = new HashMap<>();
map.put(new Key(1), "value");
System.out.println(map.get(new Key(1))); // выведет "value"
Если же использовать объект без переопределения этих методов, то поиск по ключу может не сработать.