соблюден контракт между хэш-кодом и инвелсом. у двух разных объектов может быть один хэш и мапа от этого страхует методом цепочек. если мы нарушим контракт, то может получить что у двух одинаковх по иквелсу объектов могут быть разные хэшы. Но сломает ли это работу мапы? эти два "одинаковых" объекта просто упадут в разные корзины. и все. а там уже будут найдены как положено. Я вообще не вижу проблем.
Если два объекта равны в соответствии с методом equals(), то их хэш-код должен быть одинаковым.
это условие контракта, да. я это знаю. На вопрос просто никто так и не ответил
Все проще гораздо. У тебя есть некий класс А, у которого переопределен equals, но hashcode по умолчанию. Ты создаешь экземпляр класса А - object, так как hashcode используется по умолчанию, пусть это будет значение "1". Кладешь данный экземпляр в хэшмапу: hashMap.put(object, someValue) Теперь создаешь второй экземпляр класса А - secondObject. Так как hashcode по прежнему не переопределен, у тебя hashcode будет другим, например "2". object.equals(secondObject) == true Теперь ты делаешь hashMap.get(secondObject) иии получаешь null. Так как hashcode у логически равных объектов отличается, ты будешь искать его в другом бакете и закономерно не найдешь
почему null? почему в другой корзине я его буду искать? у object хеш-код "1" корзина пусть 10 (да я знаю там своя функция на две строчки и можно вычислить, но пусть так будет) у secondObject хеш-код "2" корзина пусть 8. Пытаюсь получить hashMap.get(secondObject). Беру хеш от secondObject - 2, преобразую к номеру корзины - 8. Забираю элемент. Почему мне null должен прилететь?
Обсуждают сегодня