Вопрос проверяет понимание работы HashMap и требований к ключам, в частности, почему String является популярным выбором.
HashMap — это структура данных, которая хранит пары ключ-значение и использует хэш-код ключа для быстрого поиска. Для корректной работы ключ должен быть неизменяемым (immutable) и правильно реализовывать методы hashCode() и equals(). String идеально соответствует этим требованиям.
String в Java является неизменяемым объектом. Это означает, что после создания его значение нельзя изменить. Если бы ключ был изменяемым, его хэш-код мог бы измениться после добавления в HashMap, что привело бы к невозможности найти элемент по этому ключу. Неизменяемость String гарантирует, что хэш-код остается постоянным.
Класс String переопределяет методы hashCode() и equals() в соответствии с контрактом. Метод hashCode() вычисляет хэш на основе содержимого строки, а equals() сравнивает строки посимвольно. Это обеспечивает правильное поведение HashMap: два разных объекта String с одинаковым содержимым будут считаться равными и иметь одинаковый хэш-код.
HashMap<String, Integer> map = new HashMap<>();
map.put("key1", 1);
map.put("key2", 2);
// Поиск по ключу работает корректно
Integer value = map.get("key1"); // вернет 1
// Даже если создать новый объект String с тем же значением
String key = new String("key1");
Integer sameValue = map.get(key); // тоже вернет 1, так как equals() и hashCode() работают правильноИспользование String в качестве ключа в HashMap — это безопасный и эффективный выбор благодаря неизменяемости и корректной реализации базовых методов. Это особенно полезно в ситуациях, когда ключи представляют собой текстовые идентификаторы, такие как имена, URL или коды.