169 похожих чатов

Возникает вопрос. что будет с работой хэш-мапы, если не будет

соблюден контракт между хэш-кодом и инвелсом. у двух разных объектов может быть один хэш и мапа от этого страхует методом цепочек. если мы нарушим контракт, то может получить что у двух одинаковх по иквелсу объектов могут быть разные хэшы. Но сломает ли это работу мапы? эти два "одинаковых" объекта просто упадут в разные корзины. и все. а там уже будут найдены как положено. Я вообще не вижу проблем.

4 ответов

19 просмотров

Если два объекта равны в соответствии с методом equals(), то их хэш-код должен быть одинаковым.

Андрей-Копылов Автор вопроса
Dima
Если два объекта равны в соответствии с методом eq...

это условие контракта, да. я это знаю. На вопрос просто никто так и не ответил

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

Андрей-Копылов Автор вопроса
Viktor Gukov
Все проще гораздо. У тебя есть некий класс А, у ко...

почему null? почему в другой корзине я его буду искать? у object хеш-код "1" корзина пусть 10 (да я знаю там своя функция на две строчки и можно вычислить, но пусть так будет) у secondObject хеш-код "2" корзина пусть 8. Пытаюсь получить hashMap.get(secondObject). Беру хеш от secondObject - 2, преобразую к номеру корзины - 8. Забираю элемент. Почему мне null должен прилететь?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта