Back to questions
Junior — Middle
116
Можно ли обеспечить одинаковый hashCode для разных String объектов и как это влияет на коллекции?
Answer from AI
sobes.tech AI
Да, в Java разные объекты String могут иметь одинаковый hashCode, так как hashCode для String вычисляется на основе содержимого строки, а не ссылки на объект. Например, строки "abc" и новая строка с тем же содержимым "abc" будут иметь одинаковый hashCode.
Это влияет на коллекции, использующие хеширование (например, HashMap, HashSet): при одинаковом hashCode объекты попадают в одну корзину (bucket), и для определения равенства вызывается метод equals(). Если equals() возвращает true, объекты считаются одинаковыми ключами.
Пример:
String s1 = "test";
String s2 = new String("test");
System.out.println(s1.hashCode() == s2.hashCode()); // true
System.out.println(s1.equals(s2)); // true
HashSet<String> set = new HashSet<>();
set.add(s1);
System.out.println(set.contains(s2)); // true
Таким образом, одинаковый hashCode для разных объектов с одинаковым содержимым — нормальное и ожидаемое поведение, важное для корректной работы хеш-коллекций.